SQL Server - 删除基于另一个字段的不同行的重复行

时间:2017-06-15 03:10:09

标签: sql-server tsql sql-server-2012 duplicates

我的表格中有列和行,如下所示

col0  col1  col2  col3  col4
----------------------------
1     A     1     100   AA
2     B     2     200   BB
3     B     1     100   AA
4     A     2     200   BB

我希望最终结果是

col0  col1  col2  col3  col4
----------------------------
1     A     1     100   AA
2     B     2     200   BB

OR

col0  col1  col2  col3  col4
----------------------------
3     B     1     100   AA
4     A     2     200   BB

我想删除第一行和第二行第三行和第四行但是基于col1,正如您所看到的,他们彼此不一样除了col0之外的行,因为col0是主键。我该如何处理sql server express 2012?

2 个答案:

答案 0 :(得分:1)

这是删除第一对重复记录的选项。您可以根据四个数据列的分区分配行号。在CTE中执行此操作,然后从行号为1的CTE中删除所有记录。

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY col2, col3, col4 ORDER BY col0) rn
    FROM yourTable
)
DELETE
FROM cte
WHERE rn = 1

按照以下链接进行演示,显示我的CTE逻辑是正确的。

Demo

答案 1 :(得分:0)

您可以使用此

DELETE FROM yourTable
WHERE col0 NOT IN ( SELECT MIN(col0) FROM yourTable GROUP BY col1)