Создайте значение флага на основе повторяющихся значений в одном столбце в SQL - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в SQL.Играя с ним и застрял в следующем сценарии.

У меня есть таблица со следующими данными

enter image description here

Мое требованиев столбце FirstCol он имеет «11121» 3 раза, а SecondCol имеет два раза 1001 против FirstCol и 1002 против того же значения «11121», которое не должно быть.Если это так, мне нужно найти все данные в таких сценариях и мне нужно отобразить столбец рядом с этими двумя столбцами со значением флага, указывающим 1, если значение в SecondCol отличается от других значений.Для остальных должен отображаться '0'.

Я пытался использовать group by, density_rank (), но не смог получить желаемых результатов.Кто-нибудь, пожалуйста, помогите мне получить желаемый результат для этого.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Я думаю, что вы хотите:

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

Это помечает все строки, где col2 имеет несколько значений в col1.

0 голосов
/ 28 сентября 2018

Вы можете использовать EXISTS и коррелированный подзапрос, который проверяет, есть ли строки с таким же firstcol, но с другим secondcol.Поместите это в CASE, возвращая 1, если такая запись существует, 0 в противном случае.

SELECT t1.firstcol,
       t1.secondcol,
       CASE
         WHEN EXISTS (SELECT *
                             FROM elbat t2
                             WHERE t2.firstcol = t1.firstcol
                                   AND t2.secondcol <> t1.secondcol) THEN
           1
         ELSE
           0
       END flag
       FROM elbat t1;
...