SQL Teradata - пометить повторяющиеся записи в столбце - PullRequest
0 голосов
/ 28 января 2020

Итак, я знаю, как определить дублирующую строку, но теперь мне также нужно идентифицировать связанную с ней строку и отметить ее как дубликат. Пример:

Row     Name    ID  State   Date    Dup
---------------------------------------
001     Jim     001 NJ      jan2020 
002     Jim     001 NJ      jan2020
003     Tan     002 NY      feb2020
004     Allen   003 CA      Feb2020

Вывод должен выглядеть следующим образом:

Row     Name    ID  State   Date    Dup
---------------------------------------
001     Jim     001 NJ      jan2020 Y
002     Jim     001 NJ      jan2020 Y
003     Tan     002 NY      feb2020 N
004     Allen   003 CA      Feb2020 N

Я могу использовать раздел, используя row_number, но он не пометит запись 001 как Y. Каким может быть подход?

1 Ответ

1 голос
/ 28 января 2020

Если у вас небольшое количество столбцов, вы можете сделать что-то вроде этого:

SELECT Row, Name, ID, State, Date, 
  CASE 
    WHEN COUNT(*) OVER(PARTITION BY Name, ID, State, Date) > 1 THEN 'Y' 
    ELSE 'N' 
  END AS Dup
FROM MyTable

Это помечает данную строку как дубликат на основе столбцов, указанных в выражении PARTITION BY. Кроме того, будьте осторожны с именами столбцов (например, Row, Date), так как они могут быть зарезервированными словами.

...