Слегка косвенно:
SELECT a, b,
COUNT(DISTINCT c) AS num_c,
COUNT(DISTINCT d) AS num_d,
COUNT(DISTINCT e) AS num_e
FROM t
GROUP BY a, b;
Это дает:
1 2 1 2 1
3 2 1 1 2
Если столбец num_c
или num_d
или num_e
имеет значение, большее, чем 1, то есть различные значения. Вы можете изменить запрос, чтобы перечислить ли столбец различной для заданного значения (а, б) с помощью сазе так:
-- v for varying, n for non-varying
SELECT a, b,
CASE WHEN COUNT(DISTINCT C) > 1 THEN 'v' ELSE 'n' END AS num_c,
CASE WHEN COUNT(DISTINCT d) > 1 THEN 'v' ELSE 'n' END AS num_d,
CASE WHEN COUNT(DISTINCT e) > 1 THEN 'v' ELSE 'n' END AS num_e
FROM t
GROUP BY a, b;
Это дает:
1 2 n v n
3 2 n n v
Если вы действительно хотите знать, не меняется ли какой-либо набор значений в данном столбце для любых значений (a, b), а не для каких значений (a, b), для которых он варьируется: вы можете использовать указанный выше запрос в качестве подзапроса в предложение FROM и упорядочивать вещи по вашему желанию.
SELECT MAX(num_c) AS num_c,
MAX(num_d) AS num_d,
MAX(num_e) AS num_e
FROM (SELECT a, b,
CASE WHEN COUNT(DISTINCT C) > 1 THEN 'v' ELSE 'n' END AS num_c,
CASE WHEN COUNT(DISTINCT d) > 1 THEN 'v' ELSE 'n' END AS num_d,
CASE WHEN COUNT(DISTINCT e) > 1 THEN 'v' ELSE 'n' END AS num_e
FROM t
GROUP BY a, b
);
Это зависит от v
будучи больше, чем n
; это достаточно просто (и достаточно удобно) для этого двоичного решения, но не обязательно удобно или легко, если есть, скажем, 4 состояния для отображения.
Это дает:
n v v
Какие СУБД вы используете? – sgeddes
Я использую Oracle –