2016-01-25 4 views
0

Мне нужно найти пользователей с одинаковыми именами, фамилиями и датой рождения. Я должен указать идентификатор клиента каждого из них, поэтому я не могу использовать COUNT(*) с группой. Я использую ROW_NUMBER(), разделенный этими тремя столбцами в CTE. Но мне нужно включить все несколько значений, включая where rownumber = 1.Включить строки в ROW_NUMBER(), где больше 1, включая первое значение

Это то, что я сейчас:

;WITH 
Rownumbers AS 
(
    SELECT 
     [Client code] 
     ,Name 
     ,Surname 
     ,[Date of Birth] 
     ,ROW_NUMBER() OVER 
      (PARTITION BY 
       name 
       ,surname 
       ,[DATE of birth] 
      ORDER BY 
       [client code] 
      )AS [Row Number] 

    FROM 
     kyc_details 
) 

SELECT 
,[client code] 
,Name 
,Surname 
,[DATE of birth] 
,[Row Number] 
FROM 
[Rownumbers] 
WHERE 
[Row Number] > 1 

Проблема здесь в том, мне нужно включить rownumber = 1. По сути, мне нужно выбрать все столбцы с повторяющимися значениями, но клиентский код будет уникальным.

+0

SQL Server 2008 –

+0

ли вы рассмотреть возможность использования присоединиться? присоедините таблицу к себе и где id <> id и все остальные значения равны. Это даст вам только дубликаты. – sagi

+0

«Найти пользователей с одинаковыми именами, фамилиями и датой рождения» неясно. Вы имеете в виду, найти пользователей, которые имеют одинаковое имя, фамилию и дату рождения в качестве другого пользователя? Или найти пользователей, имеющих одно и то же имя, фамилию или дату рождения в качестве другого пользователя? – philipxy

ответ

1

Вот ответ (я использовал счет более разделены):

;WITH 
rownumbers AS 
(
    SELECT 
     [Client code],name, surname, [date of birth] 
     ,COUNT(*) OVER (PARTITION BY kd.name, kd.Surname,[DATE of birth]) AS total 
FROM 
    kyc_details AS kd 

    ) 

SELECT 
,[client code] 
,Name 
,Surname 
,[DATE of birth] 
,total 
FROM 
rownumbers 
WHERE 
total > 1 
ORDER BY 
Name 
,surname  
+0

Примите этот ответ, чтобы другие знали, что вопрос решен. –

Смежные вопросы