【问题标题】:SQL Server - Delete Duplicate Rows that based on different rows from another fieldSQL Server - 删除基于另一个字段的不同行的重复行
【发布时间】:2017-11-17 09:06:46
【问题描述】:

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

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

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

我想删除第一行和第二行第三行和第四行,但基于 col1,如您所见,它们与其他行不同,除了col0,因为 col0 是主键。我应该如何使用 sql server express 2012?

【问题讨论】:

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


    【解决方案1】:

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

    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

    【讨论】:

    • 仍然无法正常工作,先生,他们删除了相同的行。如果 iam 包括 col1,则无需删除
    • @fannykaunang 抱歉,我没有仔细查看您的数据。只需从分区中删除 col1 即可。
    • 正在删除 col2.col3 和 col4 上的重复项,但如果我从分区中删除 col1,col1 仍然重复,先生
    • 我认为分区不是解决方案
    • 感谢@tim,我更正了我对分区的总结。知道他们工作得很好,完美的先生。非常感谢!!
    【解决方案2】:

    你可以用这个

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

    【讨论】:

    • 是的,效果很好!但是,如果重复行数为千,该查询的影响是什么?
    • 你有什么问题?会不会很慢?
    • 我只是担心如果查询删除错误的记录哈哈。不管怎样,非常感谢你帮助@tien
    • 我担心的事情正在发生,即查询删除了错误的记录。我用 16 条记录进行了测试,每条记录有 4 条重复
    • 你能给我你的数据吗?我尝试测试。
    猜你喜欢
    • 2020-02-12
    • 2016-02-21
    • 1970-01-01
    • 2019-12-04
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多