如何筛选同时满足Match_Auto与Not_Approved状态的Invoice ID?
解决方案:提取同时满足双状态的发票ID
要筛选同时具备 Approval类型=Not_Approved 和 Match类型=Match_Auto 的发票ID,核心是要确保两个状态条件同时成立,而非仅满足其一。以下是几种可行的实现方式:
方法1:GROUP BY + HAVING 聚合校验
通过分组发票ID,统计符合条件的状态类型数量,确保两个条件都满足:
SELECT Invoice_ID FROM your_table_name WHERE (Status_Type = 'Approval' AND Status_Value = 'Not_Approved') OR (Status_Type = 'Match' AND Status_Value = 'Match_Auto') GROUP BY Invoice_ID HAVING COUNT(DISTINCT Status_Type) = 2;
解释:先筛选出所有匹配两个状态条件的记录,再按发票ID分组。只有当分组内同时包含两种Status_Type(即两个条件都满足)时,才返回该发票ID。
方法2:EXISTS 子查询双重校验
通过两次EXISTS分别校验目标发票是否存在两种指定状态:
SELECT DISTINCT t1.Invoice_ID FROM your_table_name t1 WHERE t1.Status_Type = 'Approval' AND t1.Status_Value = 'Not_Approved' AND EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.Invoice_ID = t1.Invoice_ID AND t2.Status_Type = 'Match' AND t2.Status_Value = 'Match_Auto' );
解释:先定位所有处于Not_Approved状态的发票,再通过子查询验证这些发票是否同时存在Match_Auto的状态记录,仅返回双条件都满足的结果。
方法3:自连接查询
将表自身关联,匹配同一发票ID的两条状态记录:
SELECT DISTINCT t1.Invoice_ID FROM your_table_name t1 JOIN your_table_name t2 ON t1.Invoice_ID = t2.Invoice_ID WHERE t1.Status_Type = 'Approval' AND t1.Status_Value = 'Not_Approved' AND t2.Status_Type = 'Match' AND t2.Status_Value = 'Match_Auto';
解释:通过自连接让同一发票的两条状态记录关联,仅当两条记录分别满足两个条件时,返回该发票ID。
原查询出错原因
你的原查询大概率仅判断了Status_Value = 'Not_Approved',未同时校验Match类型的状态是否为Match_Auto,导致仅满足单条件的发票(如54321)被错误返回。以上方法均能确保双状态条件同时成立,最终得到正确结果12345。
内容的提问来源于stack exchange,提问作者TLalli
相关产品推荐
相关产品推荐

