如何使用OVER子句删除SQL Server中的重复行?

问题描述:

这里是我的表中的列:如何使用OVER子句删除SQL Server中的重复行?

Id 
EmployeeId 
IncidentRecordedById 
DateOfIncident 
Comments 
TypeId 
Description 
IsAttenIncident 

我想删除其中EmployeeId, DateOfIncident, TypeIdDescription是相同的重复行 - 只是为了澄清 - 我想,让他们中的一个。我想我应该使用OVER条款PARTITION,但我不确定。

感谢

如果你想保持你可以使用ROW_NUMBER重复团一行。在这个例子中我保留该行与最低Id

WITH CTE AS 
(
    SELECT rn = ROW_NUMBER() 
       OVER( 
        PARTITION BY employeeid, dateofincident, typeid, description 
        ORDER BY Id ASC), * 
    FROM dbo.TableName 
) 
DELETE FROM cte 
WHERE rn > 1 

您可以使用下面的查询。这假设您想保留最新的行并删除其他重复项。

DELETE [YourTable] 
FROM [YourTable] 
LEFT OUTER JOIN ( 
    SELECT MAX(ID) as RowId 
    FROM [YourTable] 
    GROUP BY EmployeeId, DateOfIncident, TypeId, Description 
) as KeepRows ON 
    [YourTable].ID = KeepRows.RowId 
WHERE 
    KeepRows.RowId IS NULL 

使用此查询,而无需使用CTE ....

删除从 (选择ID,名称,地点,ROW_NUMBER()以上(按ID,姓名,通过ID下订单分区)ROW_COUNT from dup_table)a 其中a.row_Count> 1