删除重复的行

Ehs*_*bar 1 sql-server

我想在SQL Server中删除我的重复值.所以我找到了一个可以找到它们的查询,如何将delete语句附加到此查询中以删除它们?

(SELECT
    DocumentNumber, LineNumber, SheetNumber, Unit, COUNT(*)
FROM
    Lines
GROUP BY
    DocumentNumber, LineNumber, SheetNumber, Unit
HAVING 
    COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

我会使用CTE和排名函数,如ROW_NUMBER:

;WITH CTE AS
(
   SELECT Id, DocumentNumber, LineNumber, SheetNumber, Unit,
          RN = ROW_NUMBER() OVER (PARTITION BY DocumentNumber, LineNumber, SheetNumber, Unit 
                                  ORDER BY Id DESC) -- keeps the newest Id-row
   FROM dbo.Lines
)
DELETE FROM CTE WHERE RN > 1
Run Code Online (Sandbox Code Playgroud)

最大的好处是,它更易于阅读和维护,并且很容易将其更改SELECT * FROM CTE为查看您要删除的内容.

修改Order By零件以实现要保留的行和要删除的行的自定义逻辑.它可以包含多个列(ASC或DESC)甚至包含条件语句(fe with CASE).