SQL Server-删除重复行并维护现有主键
我有一个包含各种列的表,需要对其进行重复数据消除,但是我需要为每一行保留现有的主键。显然,在运行SELECT DISTINCT时。。。。如果没有主键列(Source_ID),则在排除主键列时会给出所需的结果 那么,我如何获得不同的行并维护现有的主键数据呢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
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中。然后,您还可以轻松地执行删除操作。