2014-03-25 75 views
0

我只是想知道,是否有可能有一個CASE語句的WHERE子句正是以這種形式...是否有可能有一個CASE當一個然後選擇WHERE子句

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 

謝謝!

+0

'CASE'在T-SQL是一個** **表達 - 它可以返回字符串或者SQL變量 - 但它**不能**執行代碼(如'SELECT'聲明)返回的東西.... –

回答

2

是的,這是有可能在下列情況下:

  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) 

但是,你可能想要做一個條件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...) 
相關問題