“CASE WHEN”运算符在“IN”语句中的使用

5
我遇到了一个 MS SQL SERVER 2012 查询问题。 我想要在 WHERE 子句的 "IN" 操作符中的 "CASE" 操作符中写入多个值,参见以下示例:
WHERE [CLIENT] IN (CASE WHEN T.[IS_PHYSICAL] THEN 2421, 2431 ELSE 2422, 2432 END)

这里的问题在于2421、2431之间不能用逗号隔开。有没有其他办法可以写这个呢? 谢谢。

请您能否提供一个带有样本数据的完整问题描述? - mohan111
1
我认为 WHEN T.[IS_PHYSICAL] 不会起作用。SQL Server需要一个布尔表达式。 - Gordon Linoff
你说得对,但是我只是用相同的逻辑发布了虚拟数据,并得到了答案。谢谢。 - Tedo G.
3个回答

5

如果您不在where子句中使用case,这将更加简单。可以尝试如下方法:

where (T.[IS_PHYSICAL] = 1 and [client] in (2421, 2431)) or
      (T.[IS_PHYSICAL] = 0 and [client] in (2422, 2432))

2

我建议使用AND / OR代替case表达式。

WHERE (T.[IS_PHYSICAL] AND [CLIENT] IN (2421, 2431))
   OR (NOT T.[IS_PHYSICAL] AND [CLIENT] IN (2422, 2432))

2
你可以将它分解为AND和OR的组合。
WHERE ((T.[IS_PHYSICAL]=1 AND [CLIENT] IN (2421, 2431)) 
       OR (T.[IS_PHYSICAL]=0 AND [CLIENT] IN (2422, 2432)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接