CASE Statement in SQL WHERE clause

痞子三分冷 提交于 2019-12-10 15:03:59

问题


I'm trying to fetch data from table where I'm using a CASE condition in the WHERE clause and currently I'm using following query:-

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

But it returns 0 for total and NULL for purchase.


回答1:


From your comment.

I want to use Case Statement, could u pls clarify me about case statament in where clause

You can use CASE statement in WHERE like this:

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

Here you need to use ELSE 1=1. otherwise you will not get desired result. For more explanation see this SQLFiddle




回答2:


I don't think that CASE can work that way. What you want is a slightly more complex expression as your WHERE clause. Probably something like this:

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'
 )


来源:https://stackoverflow.com/questions/12400574/case-statement-in-sql-where-clause

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!