删除sql server中的重复行

时间:2014-03-08 18:31:54

标签: sql-server

我有一个包含以下示例格式的表:

ID Name 
1  NULL
1  NULL
2  HELLO 
3  NULL
3  BYE

我的目标是删除具有相同IDS的重复行,但有限制。 根据示例,我需要删除ID为1的行,以及ID为3且没有值的行(NULL)。

我会坚持使用表格:

ID Name 
1  NULL
2  HELLO 
3  BYE

如何在sql server中执行此操作?谢谢

1 个答案:

答案 0 :(得分:1)

选择数据,您可以使用简单的CTE(公用表表达式);

WITH cte AS (
  SELECT id, name,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY name DESC) rn
  FROM myTable
)
SELECT id,name FROM cte WHERE rn=1;

An SQLfiddle to test with

如果您要删除表格中的重复项而不是仅选择数据而不更新任何内容,则可以使用相同的CTE;

WITH cte AS (
  SELECT id, name,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY name DESC) rn
  FROM myTable
)
DELETE FROM cte WHERE rn<>1;

Another SQLfiddle to test with,并记住在从互联网上的随机用户运行破坏性SQL语句之前,始终备份数据。