sql - 如何删除SQL Server中的重复行?

标签 sql sql-server-2008 duplicates sql-delete

如果不存在唯一行 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/

相关文章:

sql - 为什么 MS-SQL-Server(所有版本)将 1.0/12.0 转换为 numeric(8,6)?

php - 加入 3 个用户、 friend 、聊天 table

sql - 更新现有表中的 ANSI_NULLS 选项

Python数据库连接和结果集转换为字符串

sql-server - 提高数据库性能最快的方法是什么?直接瞄准我的目标(5000 个用户)?或者首先使用人工里程碑?

sql - Microsoft SQL Server 2012 的新 Identity Jump 功能如何处理数据类型范围?

sql - SQL 代理作业失败时在电子邮件中生成错误完整消息

string - 删除Excel单元格中的重复项

Python - 根据 JSON 中的值从 JSON 中删除重复元素

Java - 如何获取 JSpinner 所选项目的索引?