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

SQL Server中CASE语句特殊场景:同一值能否映射多个结果?

问题解答:让t.chain_id=3同时匹配两个Chain_code值

原代码里的CASE语句做不到这个需求——CASE是顺序匹配的,当t.chain_id=3时,只会触发第一个WHEN 3分支返回'FSC',第二个WHEN 3的分支永远不会执行,自然没法同时映射到'FSC'和'PRC'两个值。

可以用以下两种方式实现需求:

方案一:直接在ON子句中用OR拆分条件

把chain_id=3的匹配逻辑单独拆出来,用OR和其他条件组合,这样就能让同一个t.chain_id=3的记录同时匹配s.Chain_code为'FSC'或'PRC'的记录:

SELECT
    s.*, t.*
FROM
    tableA AS s 
INNER JOIN
    stage.product AS t 
    ON (
        (t.chain_id = 1 AND s.Chain_code = 'EPRC')
        OR (t.chain_id = 3 AND s.Chain_code IN ('FSC', 'PRC'))
        OR (t.chain_id = 7 AND s.Chain_code = 'CM')
    )
    AND s.item_number = REPLACE(t.item_id, '-', '')

方案二:用映射表实现一对多匹配

如果后续映射关系可能变动,或者需要更清晰的逻辑,可以用CTE(临时映射表)来存储chain_id到Chain_code的对应关系,再通过JOIN关联:

WITH chain_mapping AS (
    SELECT 1 AS chain_id, 'EPRC' AS chain_code UNION ALL
    SELECT 3, 'FSC' UNION ALL
    SELECT 3, 'PRC' UNION ALL
    SELECT 7, 'CM'
)
SELECT
    s.*, t.*
FROM
    tableA AS s 
INNER JOIN chain_mapping m ON s.Chain_code = m.chain_code
INNER JOIN stage.product AS t 
    ON t.chain_id = m.chain_id
    AND s.item_number = REPLACE(t.item_id, '-', '')

内容的提问来源于stack exchange,提问作者Angel D'souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:24:59