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
相关产品推荐
相关产品推荐

