SQL-запрос, чтобы получить все записи, где 5 столбцов одинаковы, но отличается только один столбец - PullRequest
0 голосов
/ 18 мая 2018

У меня есть эта таблица:

A   B   C   D
1  Cat XYZ 12
1  Cat XYZ 13
1  Dog XYZ 14
2  Dog ABC 15
2  Dog ABC 16
3  Cat XYZ 17

Набор результатов:

A   B   C   D
1  Cat XYZ 12
1  Cat XYZ 13
2  Dog ABC 15
2  Dog ABC 16

Мне нужны все такие записи в моей таблице, где A, B, C должны быть одинаковыми, а столбец Dможет изменяться.Пожалуйста, помогите ему в ближайшее время, поэтому просим о помощи.

Ответы [ 5 ]

0 голосов
/ 18 мая 2018

Это должно сделать это.

select * 
from ( select a, b, c, d, 
       count() over (partition by a, b, c) cnt
       from t1
     ) t 
where t.cnt > 1
0 голосов
/ 18 мая 2018

Если вам просто нужны значения a, b, c, вы можете использовать агрегацию:

select a, b, c, min(d), max(d)
from t
group by a, b, c
having min(d) <> max(d);

Если вам нужны фактические строки, то решение Йогеша с exists, вероятно, является лучшим подходом, предполагая, чтони одно из значений столбца NULL.

0 голосов
/ 18 мая 2018

Вы можете использовать exists:

select t.* 
from table t
where exists (select 1
              from table t1
              where t1.a = t.a and t1.b = t.b and t1.c = t.c and t1.d <> t.d
              );
0 голосов
/ 18 мая 2018

Учитывая, что вы хотите, чтобы один столбец отличался, вам нужно будет решить, какое значение Столбец D вы хотите выбрать.

SELECT A, B, C, MAX(D) D
FROM table
GROUP BY A, B, C

В приведенном выше решенииЯ выбрал значение максимум столбца D .

0 голосов
/ 18 мая 2018

Должно быть в состоянии сделать это с простой группой по

SELECT A, B, C, D
FROM table
GROUP BY A, B, C, D
...