2012-04-06 8 views
1

以下のクエリで何か問題があります。私は、 "カテゴリ"フィールドがA、BまたはCであるかどうかを判断し、そのカテゴリに基づいてフィールドを作成しようとしています。そのフィールドは、支払いフィールドを集計します。しかし、私は "間違った構文でキーワードAsの近くに"というエラーが出ています。私はこれをSQLビューで作成しています。 SQL Server 2008のケースステートメントに基づいてフィールドを作成しようとしています

SELECT r.id, r.category 
CASE 
WHEN r.category = 'A' then SUM(r.payment) As A_payments 
WHEN r.category = 'B' then SUM(r.payment) As B_payments 
WHEN r.category = 'C' then SUM(r.payment) As C_payments 
END 
FROM r_invoiceTable As r 
GROUP BY r.id, r.category 

を使用して、私は私が持っているデータは、A、BおよびC

サンプルデータ - r_invoiceTable

Id --- Category ---- Payment 
222  A  ---- 50 
444  A  ---- 30 
111  B  ---- 90 
777  C  ---- 20 
555  C  ---- 40 

を持っているので、上記の例すべてを実行すべきデータを持っています希望の出力 A_payments = 80、B_payments = 90、C_payments = 60

+0

はい、3つのフィールドが必要です...フィールドを1つしか持てません。私は3つの別々のフィールドがカテゴリに基づいて支払の合計で作成される必要があります。あなたが計算しているすべてのカテゴリに対して同じ 'SUM'; – dido

+0

; 'CASE'を使用するポイントは何ですか? – mshsayem

+0

@mshsayemよくすべてのカテゴリは異なる合計を持つでしょう。だから私はカテゴリー別にそれを分離する必要があります – dido

答えて

4

おそらく、あなたはこのを探しています:

SELECT 
    SUM(CASE WHEN category = 'A' THEN payment END) AS A_payments, 
    SUM(CASE WHEN category = 'B' THEN payment END) AS B_payments, 
    SUM(CASE WHEN category = 'C' THEN payment END) AS C_payments 
FROM r_invoiceTable 
+0

はい、これは私が必要なものです、ありがとう! – dido

1

あなたはこれを(カテゴリー別のお支払い合計)したいでしょうか?:

SELECT r.category, SUM(r.payment) As Payments 
FROM r_invoiceTable As r 
GROUP BY r.category 

出力は次のようになります:あなたがここに一列にこれらの数字を好きなら

category  Payments 
--------- ------------ 
    A   80 
    B   90 
    C   60 

単純なアプローチです:

SELECT 
    (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'A') as A_Payment, 
    (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'B') as B_Payment, 
    (SELECT SUM(r.payment) From r_invoiceTable As r Where r.category = 'C') as C_Payment 
+0

さて、上記のソリューションは私に3つの別々のカラムを提供しますか? Webアプリケーションでは3つの別々の列を配置する必要があるためです。 – dido

1
SELECT * 
FROM dbo.r_invoiceTable 
PIVOT 
(SUM(payment) 
FOR category IN ([a],[b],[c]) 
) AS pivoted 
+1

ソースの列を 'payment'と' category'に制限する必要があります。さもなければ、 'id'と他の列があればそれもグループ化に参加します。私。 'FROM dbo.r_invoiceTable'の代わりに' FROM(SELECT payment、category FROM dbo.r_invoiceTable)alias'を選択する必要があります。 –

関連する問題