SQLをどのように記述すれば出来ますか?
>データベース
種目 年月 金額
AA 200501 1000
AA 200502 1000
AA 200503 1000
BB 200501 1000
BB 200502 1000
CC 200503 1000
DD ・・・
>表示形式
種目 合計 年月1 年月2 年月3
AA 3000 1000 1000 1000
BB 2000 1000 1000
CC 1000 1000
DD ・・・
※注意点
年月範囲は固定ではなく適宜指定可能とする。
また、該当するデータが無い場合は空白とする。
上記の場合は「200501~200503」を指定した。
No.3ベストアンサー
- 回答日時:
なんか面白いやりかたが合ったので紹介します。
ピボットテーブルをつかうやり方。
ピボットテーブルとは、縦横おなじにて、斜めに1
がはいっているテーブルです。
年月 200501 200502 200503 ・・・
200501 1 0 0
200502 0 1 0
200503 0 0 1
・・・
作り方はこんなかんじ
CREATE TABLE `pivot`
(`年月` VARCHAR(6)
,`200501`INT(1) DEFAULT 0
,`200502`INT(1) DEFAULT 0
,`200503`INT(1) DEFAULT 0
,`200504`INT(1) DEFAULT 0
,`200505`INT(1) DEFAULT 0
,`200506`INT(1) DEFAULT 0
,UNIQUE(`年月`)
);
INSERT INTO `pivot` (`年月`)
values('200501'),('200502'),('200503'),('200504'),('200505'),('200506');
UPDATE `pivot` set `200501`=1 WHERE `年月`='200501';
UPDATE `pivot` set `200502`=1 WHERE `年月`='200502';
UPDATE `pivot` set `200503`=1 WHERE `年月`='200503';
UPDATE `pivot` set `200504`=1 WHERE `年月`='200504';
UPDATE `pivot` set `200505`=1 WHERE `年月`='200505';
UPDATE `pivot` set `200506`=1 WHERE `年月`='200506';
そこで、以下のSQLをすると一発ででます
SELECT `種別`,SUM(`金額`),
SUM(`金額`*`200501`),SUM(`金額`*`200502`),SUM(`金額`*`200503`) FROM `DB` LEFT JOIN `pivot` ON `DB`.`年月`=`pivot`.`年月` WHERE `DB`.`年月` BETWEEN '200501' AND '200503' GROUP BY `種別`;
メンテナンス用にピボットテーブルを予め大きめに
作っておくと良いかもしれませんね。
No.5
- 回答日時:
DBが何なのか判らないと、答えようがありません。
ACCESSであれば、#1や#4で書かれているようなTRANSFORMによる
ピボット集計ができますが、他のデータベースでは使えません。
他のデータベース場合は、CASE文やDECODE式を使って、クロス集約する必要が
あります。
No.4
- 回答日時:
年月は降順でいいのでしょうか
アップされた結果はちょっと違っていますよ
列名: "年月" & DCount("*","google","年月<=" & [年月] & " and 種目='" & [種目] & "'")
という式フィールドを作り
クロス集計クエリに変えて
種目:行
列名:列
金額:値:先頭
とします
TRANSFORM First(google.金額) AS 金額の先頭
SELECT google.種目, google.金額 AS 合計
FROM google
GROUP BY google.種目, google.金額
PIVOT "年月" & DCount("*","google","年月>=" & [年月] & " and 種目='" & [種目] & "'");
種目合計年月1年月2年月3
AA1000100010001000
BB100010001000
CC10001000
googleはテーブル名です
No.2
- 回答日時:
DBに何を使用しているか不明ですが・・
TRANSFORM Sum(テーブル名.金額) AS 金額合計
SELECT テーブル名.種目, Sum(テーブル名.金額) AS [合計]FROM テーブル名
WHERE (((テーブル名.年月) Between "200501" And "200503"))
GROUP BY テーブル名.種目
PIVOT テーブル名.年月;
ではどうでしょうか。
テーブル名やフィールドタイプ等は不明なので変更してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オラクルではできるのにSQLSERV...
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlserverで集計結果をUPDATEし...
-
更新クエリでキー違反
-
sqlserverで対象のレコードを削...
-
Access2000へのインポートエラー
-
AccessのSQLで、FROM句の構文エ...
-
アクセス 日付抽出(年月のみ)...
-
MAX値を条件にデータを取得する...
-
Access2つのテーブルの差額を...
-
MySQLのON DUPLICATE KEY UP
-
Access 2010動きが遅い
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
SELECT時の行ロックの必要性に...
-
ACCESS2007 フォーム 「バリア...
-
クエリのキャンセルがいつにな...
-
ビューで引数を使いたい
-
accessのエクスポートエラーに...
-
Accessにインポートしたら並び...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlserverで集計結果をUPDATEし...
-
オラクルではできるのにSQLSERV...
-
アクセス 日付抽出(年月のみ)...
-
AccessのSQLで、FROM句の構文エ...
-
違いを教えてください
-
更新クエリでキー違反
-
sqlserverで同一キー単位で金額...
-
sqlserverで対象のレコードを削...
-
シャープレジスター エラーコード
-
MAX値を条件にデータを取得する...
-
Access2000へのインポートエラー
-
access前月差分クエリ書き換え...
-
ACCESSで複数テーブルを結合し...
-
AccessテーブルでのF6キーにつ...
-
sqlplusでバックスペースが効か...
-
プライマリーキーで同じ値をUPD...
-
片方のテーブルにないデータを...
-
条件付き合計をSQLで
-
Access2つのテーブルの差額を...
おすすめ情報