WHERE 子句中是否可以有 CASE WHEN THEN SELECT

lts*_*sai 2 sql sql-server case where-clause

我只是想知道是否可以在 WHERE 子句中以这种形式添加 CASE 语句...

SELECT *
FROM TABLEA
WHERE date between '2014-02-01' and '2014-02-28' and
CASE
   WHEN date>'2014-02-28' THEN (SELECT FROM TABLEC WHERE...)
   ELSE (SELECT FROM TABLE B WHERE...)
END
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gor*_*off 5

是的,在以下情况下这是可能的:

  1. 子查询返回一个值。
  2. 有一个外部比较,例如=>

case语句返回标量值。具有一列和一个值的行“等同于”标量值。因此,以下内容是允许的:

where col = (CASE WHEN date > '2014-02-28' THEN (SELECT max(col2) FROM TABLEC WHERE...)
                 ELSE (SELECT min(col3) FROM TABLE B WHERE...)
             END)
Run Code Online (Sandbox Code Playgroud)

但是,您可能想做一个条件in语句。避开case

where date > '2014-02-28' and col in (SELECT max(col2) FROM TABLEC WHERE...) or
      date <= '2014-02-28' and col in (SELECT min(col3) FROM TABLE B WHERE...)
Run Code Online (Sandbox Code Playgroud)