年度毎の累計値を求めるSQL文

当ページのリンクには広告が含まれています。
SQLの文法
  • URLをコピーしました!

年度毎に売上累計をSQLで求める方法です。

QlikSenseやExcelなど表計算ソフトで積み上げグラフを作るのは簡単なのですがSQLで取得するにはどうしたらいいでしょうか?

意外と簡単だったので覚書しておきます!

目次

今回の目的

年度・月度毎の売上数値を年度内累計表示する。

元のデータ

売上数値
20201100
20202200
20203300
20211200
20212150
20213250

ゴールのデータ

売上数値年度内累計
20201100100
20202200300
20203300600
20211200200
20212150350
20213250600

SQL文

※予め、元のデータは【WK_TABLE_A】という名称で準備してあるものとします。

今回は【WK_TABLE_A】というテーブルを別名で結合してSQLを作成します。

元テーブルと複製テーブルを結合して累計元となるデータを作成する

結合の条件は、年が同じで月が元となるテーブルが複製テーブルの月以上であることです。

ちょっと分かりにくいですね。

実際のSQL文を見てみましょう。

SELECT A.年,A.月,A.売上数値,B.売上数値

FROM WK_TABLE A A

INNER JOIN WK_TABLE_A B

ON A.年=B.年 AND A.月>=B.月

実行すると以下のようなデータが取得できます。

A.売上数値B.売上数値
20201100100
20202200100
20202200200
20203300100
20203300200
20203300300
20201200200
20202150200
20202150150
20203250200
20203250150
20203250250

Aテーブルは当月の数値のみ取得、Bテーブルからは当月以前の全データ取得となります。

累計元となるデータをグループ化して目的のデータを取得する

最後に、取得した累計元のデータを、グループ化します。

Aの数値は年月で同じなのでグループ化、Bの数値は月以前の全データを保持しているので合計すると累計になるという訳です。

SELECT A.年,A.月,A.売上数値,SUM(B.売上数値) 年度内累計

FROM WK_TABLE A A

INNER JOIN WK_TABLE_A B

ON A.年=B.年 AND A.月>=B.月

GROUP BY A.年,A.月,A.売上数値

ORDER BY A.年,A.月

注意事項

上記の方法は、年集計のケースです。

年度集計の場合は少し注意が必要です。

通常の年度の場合、4月スタートです。

1月は12月より後の月ですが条件【A.月>=B.月】に当てはまらなくなります。

この場合はあらかじめソート用に1月~3月までは12を加算して13月~15月のようなダミーフィールドを用意する必要があります。

サンプル1

年度ソート用月売上数値
201920191010100
201920191111200
201920191212300
20192020113200
20192020214150
20192020315250
SELECT A.年,A.月,A.売上数値,SUM(B.売上数値) 年度内累計

FROM WK_TABLE A A

INNER JOIN WK_TABLE_A B

ON A.年度=B.年度 AND A.ソート用月>=B.ソート用月

GROUP BY A.年度, A.年,A.月,A.ソート用月, A.売上数値

ORDER BY A.年度,A.ソート用月

INNER JOIN句は年度とソート用月のみでOKです!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次