Получить строки из таблицы, где столбец один имеет одинаковое значение, а столбец 2 имеет другое значение - PullRequest
0 голосов
/ 02 июля 2019

Table1

Мне нужно найти все строки, в которых col2 имеет одинаковое значение, но col3 имеет другое значение. Из таблицы выше должно возвращаться Pk1, Pk3 и Pk4. Я попробовал следующее самостоятельное присоединение, но вижу дубликаты записей.

 SELECT  T1.COL1,T1.COL2,T1.COl3
    FROM Tab T1, Tab T2
        WHERE T1.Col2=T2.Col1 
        AND T1.Col3 <> T2.Col3 

;

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Аналитические функции лучше для такой работы - они избегают всех объединений. Например:

select col1, col2, col3
from   (
         select t.*, 
                case when min(col3) over (partition by col2) != 
                          max(col3) over (partition by col2) then 0 end as flag
         from   tab t
       )
where  flag = 0;

Не совсем понятно, как вы хотите обработать null в col3 - это считается «другим» значением? Что если у вас null более одного раза (для одного и того же значения в col2)? Кроме того - что если col2 может быть null?

0 голосов
/ 03 июля 2019

Попробуйте:

SELECT COL1,COL2,COL3 FROM
(SELECT COL1,COL2,COL3, COUNT(DISTINCT COL3) OVER (PARTITION BY COL2) CNT
FROM TEST)
WHERE CNT > 1

db <> fiddle demo

Cheers !!

0 голосов
/ 02 июля 2019

Я бы использовал exists:

select t.*
from t
where exists (select 1 from t t2 where t2.col2 = t.col2 and t2.col3 <> t.col3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...