【问题标题】:Remove duplicate rows from multiple criteria using sql queries使用 sql 查询从多个条件中删除重复行
【发布时间】:2023-01-22 02:53:06
【问题描述】:

我有一个包含列的表“机器", "产品“ 和 ”来源”。

Machine Product Source
M3 H cmdd6
M3 H 91
M3 H cmdd3
M4 I cmdd7
M4 J cmdd7
M4 B 827
M4 B cmdd7

在上表中,Machine 是 M3,产品相同,但 Sources 列有多个摄入量。因此,要求是删除重复的行,其中 Sources 应始终按升序排列为“cmdd”。

例如,如果产品重复并且来源不同,即“cmdd6”或“cmdd3”,则应删除重复行,并且值将保留在来源“cmdd3”中。

下面是想要实现的结果表

Machine Product Sources
M3 H cmdd3
M4 I cmdd7
M4 J cmdd7
M4 B cmdd7

下面是我试图删除计数值> 1 的重复项的查询。

WITH CTE(Machine, Product,Sources, duplicatecount) AS (
    SELECT Machine, Product, Sources, 
           ROW_NUMBER() OVER(PARTITION BY Machine, Product
                             ORDER BY Machine, Sources) AS DuplicateCount                   
    FROM Concatcleanup 
)
delete from cte
where  duplicatecount > 1

非常感谢任何帮助。

【问题讨论】:

    标签: sql sql-server window-functions sql-delete


    【解决方案1】:

    您可以在 ORDER BY 子句 ROW_NUMBER 窗口函数中使用一个额外的精心设计的字段,以拉取“命令%"-like 价值观高于一切。

    WITH cte AS (
        SELECT *,
               ROW_NUMBER() OVER(
                   PARTITION BY Machine, Product
                   ORDER BY CASE WHEN Sources NOT LIKE 'cmdd%' THEN 1 END,
                            Sources
               ) AS DuplicateCount                 
        FROM Concatcleanup
    )
    DELETE FROM cte
    WHERE DuplicateCount > 1;
    

    查看演示 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2021-11-07
      • 2011-05-29
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多