使用返回可能值列表的case语句过滤查询

时间:2017-10-18 16:48:55

标签: sql sql-server

我想根据值更改过滤器,如果这是有效的语法,代码看起来像这样:

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的所有值。

这不是一个直截了当的=,而是从值列表中进行选择,这就是它不起作用的原因。这怎么可以实现?

1 个答案:

答案 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>)