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

SQL中如何根据传入的@district参数使用不同的选择比较条件?

原代码报错原因

SQL 中 CASE 是标量值表达式,只能返回单个值,不能直接将布尔判断结果(IN/等于条件的返回值)作为 CASE 的输出用在 WHERE 子句中,所以你的写法会触发语法错误。


推荐实现方案

直接用逻辑运算符 OR 组合两个分支的判断条件即可,写法通用兼容绝大多数 SQL 引擎:

AND (
    -- 分支1:参数为Other时走IN多值匹配
    (@district = 'Other' AND I.Offense_Tract IN ('BAR','COL','GER','MEM','MIL','JAIL','JAILEAST','SCCC','1USD','2USD'))
    OR
    -- 分支2:参数为其他值时走精确匹配
    (@district != 'Other' AND I.Offense_Tract = @district)
)

如果需要兼容@district为NULL的场景,可以在括号内最前面补充@district IS NOT NULL AND限制即可。


可选CASE改写方案(不推荐)

如果你的场景必须用CASE语法实现,可调整为标量值匹配的写法,可读性和执行效率都弱于上面的方案:

AND 1 = CASE
    WHEN @district = 'Other' AND I.Offense_Tract IN ('BAR','COL','GER','MEM','MIL','JAIL','JAILEAST','SCCC','1USD','2USD') THEN 1
    WHEN @district != 'Other' AND I.Offense_Tract = @district THEN 1
    ELSE 0
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:06:03