こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

caseを使った条件分岐の加算がうまくいかない

SQLで条件によって加算するか、しないかを判定したいと思っています。

■テーブル:test
name,flag,number
mike,4,1
mike,4,2
mike,5,3
mike,6,4
mike,7,5
mike,8,6
mike,9,7

■書いたSQL
SELECT
test.name AS "name",
(CASE WHEN flag = '4' THEN sum(number) ELSE NULL END) AS "4",
(CASE WHEN flag = '5' THEN sum(number) ELSE NULL END) AS "5",
(CASE WHEN flag = '6' THEN sum(number) ELSE NULL END) AS "6",
(CASE WHEN flag = '7' THEN sum(number) ELSE NULL END) AS "7",
(CASE WHEN flag = '8' THEN sum(number) ELSE NULL END) AS "8",
(CASE WHEN flag = '9' THEN sum(number) ELSE NULL END) AS "9"
FROM test
GROUP BY
test.name

■結果
4,5,6,7,8,9
null,null,null,null,null,28

欲しい結果は、フラグが4ののものの合計。flagが「4」の場合は、「3」という結果が返ってきてもらいたいです。
flagが5の場合は、3が返ってきてもらいたいです。

SQLが間違っているのですが、どこが間違っているのかわかりません。どのように修正すればよろしいでしょうか?よろしくお願いします。

環境はSQLiteを使用しています。

投稿日時 - 2014-06-19 07:21:32

QNo.8644331

困ってます

質問者が選んだベストアンサー

SQLはこの手の処理は縦方向(?)に出力します

select flag,sum(number) as sumNumber from test group by flag;

しかし面倒ですが横方向に出せないこともありません
select
sum(number*(flag=4)) as sum4
,sum(number*(flag=5)) as sum5
,sum(number*(flag=6)) as sum6
,sum(number*(flag=7)) as sum7
,sum(number*(flag=8)) as sum8
,sum(number*(flag=9)) as sum9
from test

投稿日時 - 2014-06-19 09:44:32

お礼

ご回答ありがとうございます。参考になりました。感謝です。

投稿日時 - 2014-06-22 09:18:09

ANo.2

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

SQLの使い方が根本的に間違えているような…。
とりあえず正しいと思われるものを書いておくので、見比べてみてください。

SELECT
name, flag, SUM(number) AS number
FROM test
GROUP BY name, flag;

投稿日時 - 2014-06-19 08:05:33

お礼

ご回答ありがとうございます。参考になりました。感謝です。

投稿日時 - 2014-06-22 09:18:14