SQL Server-删除重复行并维护现有主键

SQL Server-删除重复行并维护现有主键,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个包含各种列的表,需要对其进行重复数据消除,但是我需要为每一行保留现有的主键。显然,在运行SELECT DISTINCT时。。。。如果没有主键列(Source_ID),则在排除主键列时会给出所需的结果 那么,我如何获得不同的行并维护现有的主键数据呢 Source table before de-dupe Source_ID Title First_Name Last_Name Organisation 1000013 Mr James Cain

我有一个包含各种列的表,需要对其进行重复数据消除,但是我需要为每一行保留现有的主键。显然,在运行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
使用
行编号()
如下所示:

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

也许您只需要聚合:

select max(source_id) as source_id,
       Title, First_Name, Last_Name, Organisation
from t
group by Title, First_Name, Last_Name, Organisation;

您可以从中查找重复值

;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

当您说重复数据消除时,您是指只返回相关行的
SELECT
语句,还是希望
DELETE
重复数据?最好将该查询放入CTE中。然后,您还可以轻松地执行删除操作。