我有一个包含以下示例格式的表:
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中执行此操作?谢谢
答案 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;
如果您要删除表格中的重复项而不是仅选择数据而不更新任何内容,则可以使用相同的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语句之前,始终备份数据。