売上テーブルからグループ毎に各月の金額を推移表として表示したいです。
店舗グループ事に年度別、月別に集計を行う。
店舗グループテーブルと売上テーブルをJOINする方法が思い浮かばず
店舗グループテーブルを読み込みながら、売上テーブルを集計する方法を取っています。
集計に時間がかかってしまうので、チューニングしたいのですが、何か良い方法がございますでしょうか?
言語:VB.NET
DB:SQLSERVER 2012
【出力イメージ】
|グループコード|店舗名|年度|4月|5月|6月|・・・|1月|2月|3月|
|:--|:--:|
|1|Aスーパーグループ|2019年度|249695
|||2018年度|||||||293470
|||2017年度|4185|1540|335575||||1760
|2|B商店グループ|2019年度|
|||2018年度|
|||2017年度|
|3|Cスーパーグループ|2019年度|1250
|||2018年度|
|||2017年度|
|4|Dスーパーグループ|2019年度|2420
|||2018年度|
|||2017年度|
【売上テーブル】
売上日 | 店舗コード | 売上金額 |
---|---|---|
2017/04/01 | 0001 | 4185 |
2017/05/01 | 0001 | 1540 |
2017/06/01 | 0002 | 335575 |
2018/01/02 | 0001 | 2385 |
2018/02/02 | 0001 | 244175 |
2018/03/02 | 0001 | 1760 |
2019/01/03 | 0001 | 1320 |
2019/02/03 | 0001 | 3310 |
2019/03/03 | 0001 | 293470 |
2019/04/04 | 0001 | 249695 |
2019/05/04 | 0001 | 2420 |
2019/04/04 | 0007 | 1250 |
2019/04/07 | 0101 | 2420 |
【店舗グループテーブル】
|グループコード|店舗コード|店舗名|
|:--|:--:|
|1|0001,0002,0003|Aスーパーグループ|
|2|0004,0005,0008|B商店グループ|
|3|0006,0007,0009|Cスーパーグループ|
|4|0101,0102,0103|Dスーパーグループ|
店舗グループテーブルを読み込み
グループ毎に以下のサブルーチンに店舗コードをパラメータで渡し、
3年分の売上金額を集計した結果を取得しています。
SUB 売上テーブル集計サブルーチン(店舗コードパラメータ) SELECT グループコード ,SUM(当年4月売上金額),SUM(前年4月売上金額),SUM(前々年4月売上金額)・・省略・・,SUM(当年3月売上金額),SUM(前年3月売上金額),SUM(前々年3月売上金額) FROM ( SELECT グループコード,SUM(売上金額) AS 当年4月売上金額,0 AS 前年4月売上金額,0 AS 前々年4月売上金額・・省略・・0 AS 当年3月売上金額,0 AS 前年3月売上金額,0 AS 前々年3月売上金額 FROM 売上テーブル WHERE 売上日 BETWEEN '2019/04/01' AND '2019/04/30' AND 店舗コード IN(店舗コードパラメータ) UNION ALL SELECT グループコード,0 AS 当年4月売上金額,0 AS 前年4月売上金額,0 AS 前々年4月売上金額, SUM(売上金額) AS 当年5月売上金額,0 AS 前年5月売上金額,0 AS 前々年5月売上金額・・省略・・0 AS 当年3月売上金額,0 AS 前年3月売上金額,0 AS 前々年3月売上金額 FROM 売上テーブル WHERE 売上日 BETWEEN '2019/05/01' AND '2019/05/31' AND 店舗コード IN(店舗コードパラメータ) '省略、3月分までUNIONでクエリをつなぐ ) AS TMP GROUP BY TMP.グループコード
回答4件
あなたの回答
tips
プレビュー