2012-04-26 20 views
2

現在、これを動作させるのに苦労しています。SQL:同じテーブルの4つの「where」節を組み合わせる

SELECT  Y, SUM(N) AS sumDK, NULL AS sumFI, NULL AS sumNO, NULL AS sumSE 
FROM   stat 
WHERE  (C = 'Denmark') 
GROUP BY Y 
UNION ALL 
SELECT  Y, NULL AS sumDK, SUM(N) AS sumFI, NULL AS sumNO, NULL AS sumSE 
FROM   stat 
WHERE  (C = 'Finland') 
GROUP BY Y 
UNION ALL 
SELECT  Y, NULL AS sumDK, NULL AS sumFI, SUM(N) AS sumNO, NULL AS sumSE 
FROM   stat 
WHERE  (C = 'Norway') 
GROUP BY Y 
UNION ALL 
SELECT  Y, NULL AS sumDK, NULL AS sumFI, NULL AS sumNO, SUM(N) AS sumSE 
FROM   stat 
WHERE  (C = 'Sweden') 
GROUP BY Y 

このクエリは、私にこのような行列を与える:

Y | sumDK | sumFI | sumNO | sumSE 
---------------------------------- 
2011| 25 | NULL | NULL | NULL 
2012| 5 | NULL | NULL | NULL 
2011| NULL | 18 | NULL |NULL 
2012| NULL | 5 | NULL |NULL 
...... 

にはどうすればいいだけのNOT NULLフィールドを返すクエリを実行することができますか? ありがとうございます!

+0

NULLを持つ列は表示したくないですか? – zimdanen

+0

なぜ3つの列がありますか?1つは年、1つは合計、次に合計型を示す文字列です。 – Bridge

+0

こんにちはzimdanen!私は8つの数字がある2011年と2012年の2つの行を受け取りたいだけです。 – user1204121

答えて

1

について一度テーブルを通過し、各列

select 
     Y, 
     SUM(IIF(C = 'Denmark', N, 0)) as SumDenmark, 
     SUM(IIF(C = 'Finland', N, 0)) as SumFinland, 
     SUM(IIF(C = 'Norway', N, 0)) as SumNorway, 
     SUM(IIF(C = 'Sweden', N, 0)) as SumSweden, 
     sum(N) totalSumValue, 
     count(*) totalEntries 
    FROM 
     STAT 
    WHERE 
     C IN ('Denmark', 'Finland', 'Norway', 'Sweden') 
    GROUP BY 
     Y 
+0

こんにちはDRapp!ありがとう、これは私が欲しいものに近づきます。しかし、あなたのクエリはそれぞれの年と国のテーブルのエントリの数を返します。 – user1204121

+0

@ user1204121の場合、合計国の合計金額にCOUNT(*)を加算し、合計で1からNに変更しました – DRapp

+0

ありがとうございました! totalSumValueとtotalEntriesは必要ありません)あなたは私の夕方をちょっと保存しました:-) – user1204121

0

すべての名前を変更する必要はありますか?何

SELECT  Y, SUM(N) AS sum, C 
FROM   stat 
WHERE  (C = 'Denmark') 
GROUP BY Y 
UNION ALL 
SELECT  Y, SUM(N) AS sum, C 
FROM   stat 
WHERE  (C = 'Finland') 
GROUP BY Y 
UNION ALL 
SELECT  Y, SUM(N) AS sum, C 
FROM   stat 
WHERE  (C = 'Norway') 
GROUP BY Y 
UNION ALL 
SELECT  Y, SUM(N) AS sum, C 
FROM   stat 
WHERE  (C = 'Sweden') 
GROUP BY Y 
+0

残念なことに、すべての名前を別々にする必要があります:( – user1204121

3
SELECT  Y, C, SUM(N) 'Sum' 
FROM  stat 
WHERE  C IN ('Denmark', 'Finland', 'Norway', 'Sweden') 
GROUP BY Y, C 
0

ベストの推測の試合を加算することにより、クロスタブとして、それを作成する - 私は便利なアクセスを持っていません試してみるTRANSFORM

TRANSFORM SUM(N) 
    SELECT Y FROM STAT 
    GROUP BY Y 
    ORDER BY Y 
    PIVOT C 
+0

うまく働く - ありがとう! – user1204121

関連する問題