![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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 名前
なのですが、かなり的外れかもしれません・・。
二つ(月と名前)の要素でグループ化するってのが難しいです。
アドバイスいただければと思います。
No.4ベストアンサー
- 回答日時:
No.5
- 回答日時:
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 名前
No.3
- 回答日時:
SUM01は、SUM(DECODE(月,'1',金額,0)) の別名です。
月フィールドが'1'だったら、金額フィールドを、それ以外だったら、0をSUMし、SUM01として出力しなさい
というコマンドで、1~12の12か月分 つまりSUM01 から SUM12
までのフィールドを出力します。
No.2
- 回答日時:
訂正します。
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 名前
訂正、ご丁寧にありがとうございます。
DECODE関数はオラクルでしか使えないんですね・・。
あと、SUM(DECODE(月,'1',金額,0)) SUM01
の最後のSUM01の意味がよく分からないのですが、本当ご迷惑ですが、よろしければ解説お願いできますでしょうか。
構造自体はおそらく同じだと思うので、じっくり解読してみたいと思います!
No.1
- 回答日時:
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 名前
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 日付抽出(年月のみ)...
-
sqlserverで集計結果をUPDATEし...
-
ACCESSのSQLで、NULLかNULLでな...
-
AccessのSQLで、FROM句の構文エ...
-
オラクルではできるのにSQLSERV...
-
プライマリーキーで同じ値をUPD...
-
DB構成<キーの考え方>
-
sqlserverで同一キー単位で金額...
-
違いを教えてください
-
「マスタ」と「テーブル」の違...
-
ビューで引数を使いたい
-
SELECT時の行ロックの必要性に...
-
非連結サブフォームのレコード...
-
Select ~ into ~ で作成した...
-
accessのロック
-
Accessにインポートしたら並び...
-
ACCESS2007 フォーム 「バリア...
-
2つのテーブルから条件に一致...
-
ACCESSのBookmarkプロパティの...
-
位置を指定してフィールドを追...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
AccessのSQLで、FROM句の構文エ...
-
アクセス 日付抽出(年月のみ)...
-
MAX値を条件にデータを取得する...
-
更新クエリでキー違反
-
accessでのリンクテーブルの更新
-
シャープレジスター エラーコード
-
sqlserverで対象のレコードを削...
-
違いを教えてください
-
条件付き合計をSQLで
-
access前月差分クエリ書き換え...
-
Access2000へのインポートエラー
-
ACCESSで複数テーブルを結合し...
-
Access 2010動きが遅い
-
sqlplusでバックスペースが効か...
-
片方のテーブルにないデータを...
-
sqlserverでUPDATEできません
-
MySQLのON DUPLICATE KEY UP
おすすめ情報