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

WHERE子句内嵌CASE子句报错:SSMS中SQL代码无法运行求助

问题原因及解决方法

你这段SQL无法运行的核心原因是:SQL Server的CASE表达式只能返回单个标量值,不能直接返回('HeO','OST')这类多值集合,IN子句无法识别CASE返回的多值结果,直接触发语法错误。

修正后的写法

写法一:用逻辑条件组合替代CASE

这是最直观的方式,把CASE的分支逻辑拆成WHERE里的AND/OR组合:

SELECT  * FROM TabKontaktJednani
where
(
    -- 替换成你的原查询:(SELECT ALIAS FROM TabCisZam where LoginId = SUSER_NAME())
    'ERP' = 'ERP' 
    AND TabKontaktJednani.Typ IN ('HeO','OST')
)
OR
(
    'ERP' = 'TO'
    AND TabKontaktJednani.Typ IN ('SW','OST')
)

写法二:提取公共值简化逻辑

观察你的条件,不管是ERP还是TO分支,都包含OST这个值,所以可以简化成:

SELECT  * FROM TabKontaktJednani
where
TabKontaktJednani.Typ = CASE WHEN 'ERP' = 'TO' THEN 'SW' ELSE 'HeO' END
OR TabKontaktJednani.Typ = 'OST'

写法三:用CROSS APPLY构造动态集合

如果后续分支更多,这种方式扩展性更好:

SELECT t.* 
FROM TabKontaktJednani t
CROSS APPLY (
    SELECT val 
    FROM (VALUES 
        (CASE WHEN 'ERP' = 'ERP' THEN 'HeO' END),
        (CASE WHEN 'ERP' = 'ERP' THEN 'OST' END),
        (CASE WHEN 'ERP' = 'TO' THEN 'SW' END),
        (CASE WHEN 'ERP' = 'TO' THEN 'OST' END)
    ) AS v(val)
    WHERE val IS NOT NULL
) AS filter
WHERE t.Typ = filter.val

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:58:38