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

SQL查询问题:如何实现fnd.PK1_VALUE优先匹配两个字段的逻辑

SQL调整方案

原SQL存在的问题

  • 语法错误:最后一行关联条件中NVL函数内多了冗余的=符号,语法校验无法通过
  • 逻辑不匹配需求:NVL仅能处理单个字段值为空的场景,无法实现「优先按A规则关联匹配,无匹配行时再按B规则关联」的需求
  • 隐式表连接写法可读性差,容易出现关联逻辑错误

调整后可运行SQL

SELECT 
    rcv.shipment_line_id,
    COALESCE(fnt_priority.TITLE, fnt_second.TITLE, '0') AS Putaway
FROM 
    RCV_TRANSACTIONS rcv
INNER JOIN RCV_SHIPMENT_HEADERS rcvh 
    ON rcvh.SHIPMENT_HEADER_ID = rcv.SHIPMENT_HEADER_ID
-- 第一优先级:按header_interface_id关联附件
LEFT JOIN FND_ATTACHED_DOCUMENTS fnd_priority
    ON TO_CHAR(fnd_priority.PK1_VALUE) = TO_CHAR(rcvh.HEADER_INTERFACE_ID)
LEFT JOIN FND_DOCUMENTS_TL fnt_priority
    ON fnd_priority.DOCUMENT_ID = fnt_priority.DOCUMENT_ID 
    AND fnt_priority.LANGUAGE = 'US'
-- 第二优先级:第一优先级无匹配时,按interface_transaction_id关联附件
LEFT JOIN FND_ATTACHED_DOCUMENTS fnd_second
    ON TO_CHAR(fnd_second.PK1_VALUE) = TO_CHAR(rcv.INTERFACE_TRANSACTION_ID)
LEFT JOIN FND_DOCUMENTS_TL fnt_second
    ON fnd_second.DOCUMENT_ID = fnt_second.DOCUMENT_ID 
    AND fnt_second.LANGUAGE = 'US'
WHERE 
    rcv.transaction_type = 'DELIVER'

-- 若业务要求必须匹配到至少一个附件,可开启下面的过滤条件
-- AND (fnt_priority.TITLE IS NOT NULL OR fnt_second.TITLE IS NOT NULL)

逻辑说明

  • 用两次独立的LEFT JOIN分别实现两种优先级的匹配规则,避免关联条件冲突
  • COALESCE函数按优先级返回第一个非空结果:优先返回头维度匹配到的附件标题,无匹配时返回行维度匹配到的附件标题,两者都无匹配时返回默认值0
  • 所有关联规则都写在JOIN的ON子句中,不会误过滤掉未匹配的有效行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:03