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

WHERE子句中CASE WHEN结合IN多值匹配的SQL语法问题求助

解决WHERE子句中根据Session后缀匹配多状态的SQL问题

嗨,很高兴看到你第一次发帖!咱们来搞定这个SQL查询的问题~

你原来的写法里,试图用CASE表达式给IN子句返回多个值,但这里有个小问题:CASE只能返回单个标量值,所以你的IN CASE...写法只会匹配其中一个值,没法实现你要的“HY或HN”“AY或AN”的效果。

下面给你几种正确的实现方式,按需选择:

方式一:用OR拆分逻辑(最直观推荐)

这种写法把两种场景明确分开,逻辑清晰,也容易维护:

SELECT [...] 
FROM [...] 
WHERE (Admissions.Session = @Session) 
AND (
    -- 当Session最后一位是1时,匹配HY/HN
    (RIGHT(@Session, 1) = '1' AND Admissions.Remark IN ('HY', 'HN'))
    OR 
    -- 当Session最后一位是3时,匹配AY/AN
    (RIGHT(@Session, 1) = '3' AND Admissions.Remark IN ('AY', 'AN'))
)

方式二:用CASE返回布尔判断值

把符合条件的情况用CASE标记为1,否则为0,最后筛选标记为1的记录:

SELECT [...] 
FROM [...] 
WHERE (Admissions.Session = @Session) 
AND CASE 
    WHEN RIGHT(@Session, 1) = '1' AND Admissions.Remark IN ('HY', 'HN') THEN 1
    WHEN RIGHT(@Session, 1) = '3' AND Admissions.Remark IN ('AY', 'AN') THEN 1
    ELSE 0
END = 1

方式三:用JOIN关联匹配规则(适合扩展场景)

如果以后可能要加更多后缀和对应Remark的规则,这种方式扩展性更好:

SELECT [...] 
FROM [...] 
JOIN (
    VALUES 
        ('1', 'HY'),
        ('1', 'HN'),
        ('3', 'AY'),
        ('3', 'AN')
) AS SessionRemarks(Suffix, Remark)
    ON RIGHT(@Session, 1) = SessionRemarks.Suffix
    AND Admissions.Remark = SessionRemarks.Remark
WHERE Admissions.Session = @Session

个人更推荐第一种写法,对于当前的需求来说足够简洁,可读性也最高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:13