5

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のためにtotalそしてNULLのために戻りますpurchase

4

2 に答える 2

17

あなたのコメントから。

Case 文を使用したいのですが、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 STATUS 
         WHEN 'Sold' 
         THEN delivery_date >= '2012-08-01'
         ELSE 1=1
    END

ここでは、 を使用する必要がありますELSE 1=1。そうしないと、目的の結果が得られません。詳細については、この SQLFiddleを参照してください

于 2012-09-13T07:09:38.013 に答える
4

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'
 )
于 2012-09-13T06:30:04.433 に答える