SQL自动删除两个重复项之一

时间:2014-04-02 16:34:15

标签: sql sql-server

我有一个查找重复ID的查询

 SELECT uniqueID2, count(uniqueID2) as 'count'
                                  FROM gpDetailAfterMultiplier
                                   group by uniqueID2
                                  having count(uniqueID2) > 1

这会产生类似的输出:

uniqueID2     count
111111111       2
111111112       2
111111113       2
111111114       2

如何自动删除两个重复项中的一个?

我可以通过

一次做到这一点

DELETE top(1) from gpDetailAfterMultiplier where UniqueID2 = '111111111'

有没有办法做到这一点,以便它自动循环'通过每个结果并删除每个唯一ID的两个重复项之一?

1 个答案:

答案 0 :(得分:1)

试试这个:

WITH CTE AS(
   SELECT *,
       RN = ROW_NUMBER()OVER(PARTITION BY uniqueID2 ORDER BY uniqueID2)
   FROM gpDetailAfterMultiplier
)
DELETE FROM CTE WHERE RN > 1

它将删除表中的所有重复项。

Fiddle中查看结果(在小提琴中使用SELECT查询以查看要删除的记录)。