我想根据值更改过滤器,如果这是有效的语法,代码看起来像这样:
SELECT
Value
FROM
Table
WHERE
ID IN (CASE WHEN <expression> THEN (1,2,3) ELSE (1,2) END)
所以我想选择一个值,过滤器会根据某个表达式而改变。当表达式为true时,我想选择ID为1,2或3的所有值。当表达式为false时,我想选择ID仅为1或2的所有值。
这不是一个直截了当的=
,而是从值列表中进行选择,这就是它不起作用的原因。这怎么可以实现?
答案 0 :(得分:4)
不要使用case
。简单的逻辑就足够了:
WHERE (<expression> and ID IN (1, 2, 3)) or
(not <expression> and ID IN (1, 2))
在这种情况下,您可以将其简化为:
where id in (1, 2) or
(id = 3 and <expression>)