2012-09-13 86 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