You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选同时满足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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:25:02