基于CASE的SQL Server WHERE

时间:2018-09-11 11:41:45

标签: sql sql-server

如果PARAM等于1,则要搜索TAX ='asd'的所有行,否则要搜索TAX <>'asd'的所有行(不是'asd'的所有行)。

类似这样的东西:

WHERE
  TAX (
     CASE
        WHEN PARAM = '1'
           THEN = 'asd'
        ELSE <> 'asd'
     END)

4 个答案:

答案 0 :(得分:3)

您可以添加带有布尔逻辑的where子句:

WHERE (PARAM = 1 AND TAX = 'asd') OR
      (PARAM <> 1 AND TAX <> 'asd');

如果PARAM具有NUMERIC类型,则无需包含' '

答案 1 :(得分:1)

不需要CASE语句,只需使用方括号和OR

SELECT *
FROM yourtable
WHERE (TAX = 'asd' AND PARAM = '1') OR (TAX != 'asd')

答案 2 :(得分:0)

SELECT *
FROm table
WHERE (TAX = 'asd' AND PARAM IN (1))
OR (TAX <> 'asd' AND PARAM NOT IN (1))

答案 3 :(得分:0)

这可以通过“或”,“与”和一些括号来实现:

WHERE (PARAM = 1 AND TAX = 'asd')
OR (TAX <> 'asd')

除非数据库设计明确禁止,否则请务必考虑TAX可能为NULL的情况。