2012-09-13 94 views
5

我試圖獲取在那裏我的WHERE子句中使用CASE條件從表中的數據,目前我使用下面的查詢: -CASE語句的WHERE子句

SELECT count(enq_id) AS total, sum(purchase_amount) AS purchase 
FROM temp_stock 
WHERE purchase_date <> '0000-00-00' 
AND purchase_date < '2012-08-01' 
AND (

STATUS = 'Sold' 
OR STATUS = 'In Stock' 
OR STATUS = 'Ref' 
) 
AND CASE WHEN (

STATUS = 'Sold' 
) 
THEN delivery_date >= '2012-08-01' 
END 

但它返回0對於totalNULL對於purchase

回答

16

your comment

我想用Case語句,可以ü請澄清我有關情況statament在where子句

您可以使用CASE聲明WHERE這樣的:

SELECT count(enq_id) AS total, sum(purchase_amount) AS purchase 
FROM temp_stock 
WHERE purchase_date <> '0000-00-00' 
AND purchase_date < '2012-08-01' 
AND ( STATUS = 'Sold' 
     OR STATUS = 'In Stock' 
     OR STATUS = 'Ref') 
AND CASE STATUS 
     WHEN 'Sold' 
     THEN delivery_date >= '2012-08-01' 
     ELSE 1=1 
    END 

這裏,您需要使用ELSE 1=1。否則你不會得到理想的結果。有關更多解釋,請參閱this SQLFiddle

+1

謝謝hims056,現在工作.. – guri

3

我不認爲CASE可以這樣工作。你想要的是一個稍微複雜的表達式作爲你的WHERE子句。可能是這樣的:

SELECT count(enq_id) AS total, sum(purchase_amount) AS purchase 
FROM temp_stock 
WHERE purchase_date <> '0000-00-00' 
    AND purchase_date < '2012-08-01' 
    AND (
    (STATUS = 'Sold' AND delivery_date >= '2012-08-01') 
    OR STATUS = 'In Stock' 
    OR STATUS = 'Ref' 
) 
+0

感謝Ian Clelland的回覆,您的查詢正在工作但是我想使用Case Statement,請您在where條款中澄清我的case case情況。提前致謝 – guri