2013-04-24 109 views
4

這裏是我的表中的列:如何使用OVER子句刪除SQL Server中的重複行?

Id 
EmployeeId 
IncidentRecordedById 
DateOfIncident 
Comments 
TypeId 
Description 
IsAttenIncident 

我想刪除其中EmployeeId, DateOfIncident, TypeIdDescription是相同的重複行 - 只是爲了澄清 - 我想,讓他們中的一個。我想我應該使用OVER條款PARTITION,但我不確定。

感謝

回答

16

如果你想保持你可以使用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 
0

您可以使用下面的查詢。這假設您想保留最新的行並刪除其他重複項。

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 
2

使用此查詢,而無需使用CTE ....

刪除從 (選擇ID,名稱,地點,ROW_NUMBER()以上(按ID,姓名,通過ID下訂單分區)ROW_COUNT from dup_table)a 其中a.row_Count> 1