代码之家  ›  专栏  ›  技术社区  ›  Yara1994

如果另一列具有特定值-SQL Server,则删除具有唯一Id的所有行

  •  0
  • Yara1994  · 技术社区  · 2 年前

    我需要删除 全部 如果标签为“Error”,则为PaymentId的实例。

    CREATE TABLE Test
    (Id INT, PaymentId INT, Label VARCHAR(25));
    
    INSERT INTO Test
    VALUES
    (1, 22, 'Error'),
    (2, 22, 'Seattle'),
    (3, 22, 'Pending'),
    (4, 33, 'Paid'),
    (5, 33, 'Los Angeles'),
    (6, 44, 'Houston'),
    (7, 44, 'Error'),
    (8, 55, 'Pending'),
    (9, 55, 'San Diego'),
    (10, 55, 'Authorization')
    
    SELECT * FROM Test
    
    身份证件 标签
    1.
    2. 22 西雅图
    3. 22
    4. 33 支付
    33 洛杉矶
    休斯敦
    7. 44
    8. 悬而未决的
    55
    9 55

    预期输出:

    身份证件 付款ID
    4. 33 支付
    5. 洛杉矶
    8. 55
    9 55 圣地亚哥
    9 55 西雅图
    2 回复  |  直到 2 年前
        1
  •  1
  •   John Cappelletti    2 年前

    只是通过CTE和窗口功能的另一个选项 sum() over()

    ;with cte as (
    SELECT * 
          ,Flg = sum( case when Label='Error' then 1 end) over (partition by PaymentID)
     FROM Test
    )
    Delete from cte where Flg >=1
    

    更新后的表

    enter image description here

        2
  •  1
  •   Cetin Basoz    2 年前

    delete from Test
    where PaymentId in  (select PaymentId from test where Label='Error' );
    

    DBFiddle demo