【问题标题】:Remove All Rows with Unique Id If Another Column has specific value如果另一列具有特定值,则删除所有具有唯一 ID 的行
【发布时间】:2022-10-09 09:10:24
【问题描述】:

我需要删除全部如果标签为“错误”,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
Id PaymentId Label
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
9 55 Authorization

预期输出:

Id PaymentId Label
4 33 Paid
5 33 Los Angeles
8 55 Pending
9 55 San Diego
9 55 Seattle

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    通过 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
    

    更新的表格

    【讨论】:

      【解决方案2】:

      您可以使用 IN。

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

      DBFiddle demo

      【讨论】:

        最近更新 更多