2011-01-12 12 views
2

以下のクエリを使用して、単一の条件に基づいて特定の列データを数えます。SQL Serverで単一のクエリを使用して、さまざまな条件の列データを計算するにはどうすればよいですか?

SELECT COUNT(DISTINCT(S.INVOICENO)) AS LESSTWO , YEAR(S.invoicedate) YER, 
    Month(S.invoicedate) MNTH 
FROM SALESDATA S 
where S.BILLINGTYPE='INVOICE' 
    AND (S.invoicedate >='4-1-2009' and S.invoicedate <='4-30-2010') 
    AND S.TAXABLEAMT <=2000 
GROUP BY YEAR(S.invoicedate) ,Month(S.invoicedate) 
ORDER BY YEAR(S.invoicedate) ,Month(S.invoicedate) 

しかし、さらに3つの条件を計算する必要があります。 3つの条件(つまり、2001 - 3000,3001 - 4000,4001 - 5000、> 5000)に基づいてカウントすることは可能ですか?すべての条件に対して結果セットが必要ですか?

よろしく、

N.SRIRAM

答えて

0

未テストを必要とする状態ごとに1つずつ、しかしであるべきです右:

SELECT CASE 
      WHEN S.TaxableAmt <= 2000 THEN '<=2000' 
      WHEN S.TaxableAmt <= 3000 THEN '2001-3000' 
      WHEN S.TaxableAmt <= 4000 THEN '3001-4000' 
      ELSE '>5000' 
     END as Bracket, 
COUNT(DISTINCT(S.INVOICENO)) AS LESSTWO , YEAR(S.invoicedate) YER, 
    Month(S.invoicedate) MNTH 
FROM SALESDATA S 
where S.BILLINGTYPE='INVOICE' 
    AND (S.invoicedate >='20090401' and S.invoicedate <='20100430') 
GROUP BY 
     CASE 
      WHEN S.TaxableAmt <= 2000 THEN '<=2000' 
      WHEN S.TaxableAmt <= 3000 THEN '2001-3000' 
      WHEN S.TaxableAmt <= 4000 THEN '3001-4000' 
      ELSE '>5000' 
     END, 
YEAR(S.invoicedate) ,Month(S.invoicedate) 
ORDER BY YEAR(S.invoicedate) ,Month(S.invoicedate) 

あなたはGROUP BY句でCASE式を繰り返して(またはサブクエリでそれをすべてを置く)しなければならない、と私はあなたを修正しましたそれらが明白であるように日付定数を使用します。

+0

ありがとうございます。私は以下のようにあなたの質問を修正しました。 – sriramjitendra

0

私はあなたが本当に3つの異なるクエリにクエリを分割する必要があると思う - あなたは

関連する問題