如何使用OVER子句删除SQL Server中的重复行?
问题描述:
这里是我的表中的列:如何使用OVER子句删除SQL Server中的重复行?
Id
EmployeeId
IncidentRecordedById
DateOfIncident
Comments
TypeId
Description
IsAttenIncident
我想删除其中EmployeeId, DateOfIncident, TypeId
和Description
是相同的重复行 - 只是为了澄清 - 我想,让他们中的一个。我想我应该使用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