如果不存在唯一行 ID
,如何删除重复行?
我的 table 是
col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
sally 2 2 2 2 2 2
删除重复项后我希望保留以下内容:
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
我尝试了一些查询,但我认为它们依赖于行 ID,因为我没有得到所需的结果。例如:
DELETE
FROM table
WHERE col1 IN (
SELECT id
FROM table
GROUP BY id
HAVING (COUNT(col1) > 1)
)
最佳答案
我喜欢 CTE 和 ROW_NUMBER
,因为两者结合起来可以让我们看到哪些行被删除(或更新),因此只需将 DELETE FROM CTE...
更改为从 CTE 选择*
:
WITH CTE AS(
SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1
DEMO (结果不同;我认为这是由于您的拼写错误所致)
COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
由于 PARTITION BY col1
,此示例通过单个列 col1
确定重复项。如果您想包含多个列,只需将它们添加到 PARTITION BY 中即可:
ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)
关于sql - 如何删除SQL Server中的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390574/