我想在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)
我会使用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
).
归档时间: |
|
查看次数: |
48 次 |
最近记录: |