dポイントプレゼントキャンペーン実施中!

SQL初心者です。
ちょっとSQLの作り方で詰まったしまったので、アドバイスいただければと考えています。

月   名前   金額
2   Aさん   15000
12  Bさん 20000
1    Aさん 80000
2    Eさん 14000
・  ・    ・
・    ・    ・

のようなテーブルから、月ごとに、誰がいくら使ったかを表示するクエリを作りたいのです。
各フィールドに月、各レコードに人を配置したいと思っています。

一応考えたSQLが↓

SELECT DSUM([月],"テーブル名",月 = 1) AS 1月, DSUM([月],"テーブル名",月 = ) AS 2月, ・・・ AS 12月
FROM テーブル名
GROUP BY 名前

なのですが、かなり的外れかもしれません・・。
二つ(月と名前)の要素でグループ化するってのが難しいです。
アドバイスいただければと思います。

A 回答 (5件)

私の場合、Oracleが主流ですので、SQLServerについて調べたところ、


CASE式で対応できそうですね。
http://codezine.jp/a/article.aspx?aid=405
    • good
    • 1
この回答へのお礼

本当にいろいろ調べてくださいまして、ありがとうございました!

無事できました^^

お礼日時:2007/08/22 11:28

select


名前,
sum(case when 月=1 then 金額 else 0 end) as 1月,
sum(case when 月=2 then 金額 else 0 end) as 2月,
sum(case when 月=3 then 金額 else 0 end) as 3月,
sum(case when 月=4 then 金額 else 0 end) as 4月,
sum(case when 月=5 then 金額 else 0 end) as 5月,
sum(case when 月=6 then 金額 else 0 end) as 6月,
sum(case when 月=7 then 金額 else 0 end) as 7月,
sum(case when 月=8 then 金額 else 0 end) as 8月,
sum(case when 月=9 then 金額 else 0 end) as 9月,
sum(case when 月=10 then 金額 else 0 end) as 10月,
sum(case when 月=11 then 金額 else 0 end) as 11月,
sum(case when 月=12 then 金額 else 0 end) as 12月
from テーブル名
group by 名前
    • good
    • 0
この回答へのお礼

すごく長いのに丁寧に書いていただきまして本当にありがとうございました!

お礼日時:2007/08/22 11:28

SUM01は、SUM(DECODE(月,'1',金額,0)) の別名です。



月フィールドが'1'だったら、金額フィールドを、それ以外だったら、0をSUMし、SUM01として出力しなさい
というコマンドで、1~12の12か月分 つまりSUM01 から SUM12
までのフィールドを出力します。
    • good
    • 1

訂正します。


SELECT
名前
,SUM(DECODE(月,'1',金額,0)) SUM01
,SUM(DECODE(月,'2',金額,0)) SUM02
,SUM(DECODE(月,'3',金額,0)) SUM03
,SUM(DECODE(月,'4',金額,0)) SUM04
,SUM(DECODE(月,'5',金額,0)) SUM05
,SUM(DECODE(月,'6',金額,0)) SUM06
,SUM(DECODE(月,'7',金額,0)) SUM07
,SUM(DECODE(月,'8',金額,0)) SUM08
,SUM(DECODE(月,'9',金額,0)) SUM09
,SUM(DECODE(月,'10',金額,0)) SUM10
,SUM(DECODE(月,'11',金額,0)) SUM11
,SUM(DECODE(月,'12',金額,0)) SUM12
FROM (SELECT 名前 ,月,SUM(金額) 金額
FROM TEST_TABLE
WHERE 月 BETWEEN '1' AND '12'
GROUP BY 名前
,月) TBL1
GROUP BY 名前
    • good
    • 0
この回答へのお礼

訂正、ご丁寧にありがとうございます。

DECODE関数はオラクルでしか使えないんですね・・。

あと、SUM(DECODE(月,'1',金額,0)) SUM01
の最後のSUM01の意味がよく分からないのですが、本当ご迷惑ですが、よろしければ解説お願いできますでしょうか。

構造自体はおそらく同じだと思うので、じっくり解読してみたいと思います!

お礼日時:2007/08/16 11:03

Oracleで、同様?なSQLを作成していましたので、参考になれば幸いです。


SELECT
名前
,SUM(DECODE(月,'1',金額,0)) SUM01
,SUM(DECODE(月,'2',金額,0)) SUM02
,SUM(DECODE(月,'3',金額,0)) SUM03
,SUM(DECODE(月,'4',金額,0)) SUM04
,SUM(DECODE(月,'5',金額,0)) SUM05
,SUM(DECODE(月,'6',金額,0)) SUM06
,SUM(DECODE(月,'7',金額,0)) SUM07
,SUM(DECODE(月,'8',金額,0)) SUM08
,SUM(DECODE(月,'9',金額,0)) SUM09
,SUM(DECODE(月,'10',金額,0)) SUM10
,SUM(DECODE(月,'11',金額,0)) SUM11
,SUM(DECODE(月,'12',金額,0)) SUM12
FROM (SELECT 名前 ,月,SUM(金額) 金額
FROM TEST_TABLE
WHERE 月 BETWEEN '2007/04' AND '2008/03'
GROUP BY 名前
,月) TBL1
GROUP BY 名前
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!