SQL Server - удаляйте дублирующиеся строки и сохраняйте существующий первичный ключ - PullRequest
0 голосов
/ 23 июня 2018

У меня есть таблица с различными столбцами, которые мне нужно дедуплицировать, однако мне нужно сохранить существующий первичный ключ для каждой строки. Очевидно, что при запуске SELECT DISTINCT .... без столбца первичного ключа (Source_ID) я получаю требуемый результат при исключении столбца первичного ключа.

Итак, как мне получить отдельные строки и сохранить существующие данные первичного ключа.

Source table before de-dupe

Source_ID   Title   First_Name  Last_Name   Organisation
1000013     Mr      James       Caine       Company1 
1000014     Ms      Judith      Jason       Company2
1000015     Mr      James       Caine       Company1 


table after de-dupe

Source_ID   Title   First_Name  Last_Name   Organisation
1000013     Mr      James       Caine       Company1 
1000014     Ms      Judith      Jason       Company2

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

Возможно, вы просто хотите агрегировать:

select max(source_id) as source_id,
       Title, First_Name, Last_Name, Organisation
from t
group by Title, First_Name, Last_Name, Organisation;
0 голосов
/ 23 июня 2018

Вы можете использовать это для поиска повторяющегося значения

;WITH cte AS 
(SELECT Source_ID, Title, First_Name, Last_Name, Organisation,
rn=ROW_NUMBER() OVER(Partition by Title, First_Name, Last_Name, Organisation Order by Source_ID 
FROM YourTable)
SELECT * 
FROM WHERE rn > 1

Обнаружение дублирующихся элементов в рекурсивном CTE

0 голосов
/ 23 июня 2018

Используйте ROW_NUMBER() как показано ниже:

SELECT Source_ID, Title, First_Name, Last_Name, Organisation
FROM
    (SELECT *,ROW_NUMBER() OVER(Partition by Title, First_Name, Last_Name, Organisation Order by Source_ID) as rn
    FROM YourTable) as tblMain
WHERE rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...