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

SQL查询同时返回BILL_OF_LADING非空及含SHQ记录并提取发货数量

问题根因

SQL中逻辑运算符AND的优先级高于OR,你原有写法的WHERE条件实际执行逻辑为:

(PO_NUMBER = '1234567' AND BILL_OF_LADING IS NOT NULL)
OR
(AUDIT_TRAIL_VERBAGE LIKE 'SHQ%')

这会导致所有满足AUDIT_TRAIL_VERBAGE以SHQ开头的行都被返回,哪怕PO号不匹配,和你的预期逻辑不符。


修正方案

1. 修复WHERE筛选逻辑

给OR关联的两个条件加括号,确保先判定PO号匹配,再筛选行类型:

SELECT  PO_NUMBER,
        AUDIT_TRAIL_VERBAGE,
        BILL_OF_LADING
FROM MY.TABLE
WHERE 
       PO_NUMBER = '1234567' -- 单值匹配用=更简洁,多值匹配场景再用IN
   AND (
          BILL_OF_LADING IS NOT NULL
       OR AUDIT_TRAIL_VERBAGE LIKE 'SHQ%'
   )

2. 提取SHQ后5位发货数量+同PO合并返回

如果需要把同一个PO的提单号、发货数量合并为一行返回,可以配合CASE和聚合函数实现:

SELECT  
    PO_NUMBER,
    -- 提取提单号
    MAX(CASE WHEN BILL_OF_LADING IS NOT NULL THEN BILL_OF_LADING END) AS BILL_OF_LADING,
    -- 提取SHQ后5位数字,SHQ加空格占前4位,从第5位开始取5位
    MAX(CASE WHEN AUDIT_TRAIL_VERBAGE LIKE 'SHQ%' THEN SUBSTRING(AUDIT_TRAIL_VERBAGE, 5, 5) END) AS SHIP_QUANTITY
FROM MY.TABLE
WHERE 
    PO_NUMBER = '1234567'
    AND (
        BILL_OF_LADING IS NOT NULL
        OR AUDIT_TRAIL_VERBAGE LIKE 'SHQ%'
    )
GROUP BY PO_NUMBER

注:如果使用Oracle数据库,将SUBSTRING替换为SUBSTR即可。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:42:02