如果存在重复,则删除行

时间:2014-02-04 06:26:21

标签: sql sql-server

我想删除表格中的重复行。它应该保留第一个,或者一个在顶部,如果有任何其他重复,则应删除它。

enter image description here

如图所示,有两个12和两个13.所以保留数据库中的前12个,如果有任何其他删除它们同样适用于13或任何ID。

我的想法:

DELETE from [Table]
WHERE [ID]
HAVING COUNT(TABLE.ID) > 1; 

1 个答案:

答案 0 :(得分:3)

您可以尝试使用CTEROW_NUMBER

  

公用表表达式(CTE)可以被认为是临时表   在单个执行范围内定义的结果集   SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句。 CTE是   类似于派生表,因为它不存储为对象和   仅持续查询的持续时间。与派生表不同,a   CTE可以是自引用的,可以多次引用   相同的查询。

这样的东西
;WITH DeleteRows AS (
    SELECT  *,
            ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) RowID
    FROM    [Table]
)
DELETE from DeleteRows
WHERE RowID > 1

SQL Fiddle DEMO