SQL Server: найти строку с дубликатами с NULL - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно найти повторяющиеся строки в таблице SQL Server.Проблема в том, что значения могут быть NULL.У меня есть следующий код, который, кажется, работает нормально, поскольку ячейки не равны NULL:

select s.ID, t.* 
from [Data] s
join (select Term1, Term2, Term3, Term4, count(*) as cnt
      from [Data]
      group by Term1, Term2, Term3, Term4
      having count(*) > 1) t on s.Term1 = t.Term1 
                             and s.Term2 = t.Term2 
                             and s.Term3 = t.Term3 
                             and s.Term4 = t.Term4

Как я могу адаптировать его, чтобы он мог найти дубликаты, даже если есть значения NULL, такие как

Term1    Term2    Term3    Term4
--------------------------------
hello    NULL     okay     NULL
hello    NULL     okay     NULL

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы уверены, что вам нужно вернуть обе строки в дубликате?Ваш внутренний запрос подходит для выявления дублирующихся строк, и вы можете добавить счетчик в качестве дополнительного столбца.В чем выгода возврата каждой строки?

0 голосов
/ 15 октября 2018

Вы можете использовать COUNT(*) OVER():

WITH cte AS (
  SELECT *, COUNT(*) OVER(PARTITION BY Term1, Term2, Term3, Term4) AS cnt
  FROM [Data]
)
SELECT *
FROM cte
WHERE cnt > 1
...