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で質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
アクセス 日付抽出(年月のみ)...
-
ACCESSのSQLで、NULLかNULLでな...
-
MAX値を条件にデータを取得する...
-
AccessのSQLで、FROM句の構文エ...
-
sqlserverで対象のレコードを削...
-
「マスタ」と「テーブル」の違...
-
データの二重表示の原因
-
SELECT時の行ロックの必要性に...
-
[ BETWEEN ] vs [ >= AND <= ]
-
ACCESS 一番最新の日付の金額...
-
クエリのキャンセルがいつにな...
-
accessのロック
-
SELECT FOR UPDATE にトランザ...
-
accessのエクスポートエラーに...
-
DataTableから条件を満たした行...
-
ACCESSでのエクセルインポート...
-
ビューで引数を使いたい
-
Accessでの排他制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlserverで集計結果をUPDATEし...
-
オラクルではできるのにSQLSERV...
-
アクセス 日付抽出(年月のみ)...
-
違いを教えてください
-
更新クエリでキー違反
-
MAX値を条件にデータを取得する...
-
AccessのSQLで、FROM句の構文エ...
-
プライマリーキーで同じ値をUPD...
-
シャープレジスター エラーコード
-
sqlplusでバックスペースが効か...
-
ACCESSで複数テーブルを結合し...
-
F1キーを押すの 英訳
-
sqlserverで同一キー単位で金額...
-
sqlserverで対象のレコードを削...
-
アクセスで複数テーブルの選択
-
Access 2010動きが遅い
-
AccessテーブルでのF6キーにつ...
-
DB構成<キーの考え方>
-
accessでのリンクテーブルの更新
おすすめ情報