OK,首先我们使用最常见的方法: Delete From Employee Where Name in (select NameFrom Employee Group By Name Having Count(Name)>1); 接着使用RowNumber(): Delete T From( Select Row_Number() Over(Partition By [Name] Order By (SELECT 0)) As RowNumber,* From Employee) TWhere T.RowNumber > 1;
With Dups as ( select ROW_NUMBER() Over(Partition by [Name] Order by (SELECT 0)) as rn FROM Employee ) Delete From Dups Where rn>1;
再加上RANK()的CTE:
代码如下:
WITH Dups As ( Select [ID],[Sex] ,ROW_NUMBER() OVER(Partition By [Name] Order By (SELECT 0)) AS rn ,RANK() OVER(Partition By [Name] Order By (SELECT 0)) AS rnk FROM Employee ) DELETE FROM Dups WHERE rn<>rnk;
WITH Dups As ( Select [ID],ROW_NUMBER() OVER(Partition By [ID] Order By (SELECT 0)) AS rn FROM Employee ) Select [ID],[Sex] INTO dbo.EmployeeDupsTmp FROM Dups WHERE rn=1 DROP TABLE dbo.Employee; EXEC sp_rename 'dbo.EmployeeDupsTmp','Employee'