以下是我表格中的列:
Id
EmployeeId
IncidentRecordedById
DateOfIncident
Comments
TypeId
Description
IsAttenIncident
我想删除EmployeeId, DateOfIncident, TypeId
和Description
相同的重复行 - 只是为了澄清 - 我确实希望保留其中一行。我想我应该在OVER
使用PARTITION
子句,但我不确定。
由于
答案 0 :(得分: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
答案 1 :(得分:2)
使用此查询而不使用CTE ....
删除一个 (选择id,name,place,ROW_NUMBER()over(按ID分区,名称,按ID排序)row_Count 来自dup_table)a 其中a.row_Count> 1
答案 2 :(得分: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