売上集計を出力する場合には、日報、月報、年度集計など、色々な集計単位で出力することが多いと思います。
実現方法は、アプリケーションで実装する場合や、SQLで実装する場合など、色々な実現方法があります。
本記事では、SQLを利用した、それぞれの集計方法を説明しています。
月単位の集計
売上月報のように、月単位で集計をしたい場合があると思います。
実現方法は色々とありますが、SQLで実現する場合は、年月日を保持している項目を年月で切り取り、それをグルーピングすることで実現できます。
下記のSQL例は、SQLSERVERですが、MySQLなどでも、日付変換や、文字列の切り出しを変えるだけで、考え方は同じです。
1 2 3 4 5 6 7 8 |
SELECT 伝票日付 as '伝票日付' , SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111),1,7) as '集計月' , SUM(数量) as '数量' , SUM(税込金額) as '税込金額' GROUP BY SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111),1,7); |
年単位の集計
1 2 3 4 5 6 7 8 |
SELECT 伝票日付 as '伝票日付' , SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111),1,4) as '集計年' , SUM(数量) as '数量' , SUM(税込金額) as '税込金額' GROUP BY SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111),1,4); |
年単位の集計(年度が1月以外)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
SELECT MAIN.伝票日付 as '伝票日付' , CASE WHEN SUBSTRING(CONVERT(VARCHAR, MAIN.伝票日付, 111), 6, 2) < 2 THEN SUBSTRING(CONVERT(VARCHAR, MAIN.伝票日付, 111), 1, 4) - 1 ELSE SUBSTRING(CONVERT(VARCHAR, MAIN.伝票日付, 111), 1, 4) END as '年度' , SUM(MAIN.数量) as '数量' , SUM(MAIN.税込金額) as '税込金額' FROM ( SELECT 伝票日付 as '伝票日付' , CASE WHEN SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111), 6, 2) < 2 THEN SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111), 1, 4) - 1 ELSE SUBSTRING(CONVERT(VARCHAR, 伝票日付, 111), 1, 4) END as '年度' , 数量 as '数量' , 税込金額 as '税込金額' ) MAIN GROUP BY 年度; |