#707 ユニオンクエリの結果をグループ集計するには? クエリ

たとえば「tbl販売実績2020」というテーブルを元に、クエリで「商品コード」ごとの「1月」〜「6月」各月の合計を集計したい場合、次のようなSQL文の集計クエリを作ります(これはデザインビューでも簡単にできます)。

SELECT 商品コード, Sum([1月]) AS 1月合計, Sum([2月]) AS 2月合計, Sum([3月]) AS 3月合計, Sum([4月]) AS 4月合計, Sum([5月]) AS 5月合計, Sum([6月]) AS 6月合計
FROM tbl販売実績2020
GROUP BY 商品コード


一方、単一のテーブルではなく、同じ列構成の複数のテーブルをまとめて集計したい場合、たとえば「tbl販売実績2020」と「tbl販売実績2021」の2つのテーブルの合計を求めたいといった場合、集計クエリとユニオンクエリを組み合わせることで実現することができます。

それには、SQLビューにおいて、次のようなSQL文を直接記述します。

SQL文:

SELECT 商品コード, Sum([1月]) AS 1月合計, Sum([2月]) AS 2月合計, Sum([3月]) AS 3月合計, Sum([4月]) AS 4月合計, Sum([5月]) AS 5月合計, Sum([6月]) AS 6月合計
FROM
(SELECT 商品コード, [1月], [2月], [3月], [4月], [5月], [6月] FROM tbl販売実績2020
UNION ALL
SELECT 商品コード, [1月], [2月], [3月], [4月], [5月], [6月] FROM tbl販売実績2021
) AS QUNI

GROUP BY 商品コード

SQLビュー:


作成のポイントは、まずは単一のテーブルで集計クエリのSQL文の枠組みを作り、「FROM」句の部分を丸ごと「ユニオンクエリ」のSQL文に書き換えることです(テスト的にユニオンクエリの部分だけを事前に別途作って試しておきコピー&ペーストしてもよいかもしれません)。
上記ではFROM句の次のあるカッコで囲まれた部分がユニオンクエリで、この部分だけでも単一のクエリとして成り立つものです。つまり、クエリの中にクエリがある、クエリのソース(FROM)としてクエリを指定していることになります。


実行結果:
■元の2つのテーブル



■クエリのデータシートビュー



【補足】
  • ”クエリの中にクエリがある”ということから、まったく別の作り方をすることもできます。今回は1つのクエリでユニオンクエリを集計するという形で作っていますが、ユニオンクエリの部分を単独のクエリとして作成・保存し、それを別の集計クエリのソースとすることもできます。

  • 「AS QUNI」の部分は必須ではありませんが、このクエリを保存するとAccessが勝手に分かりにくい名前を付けてしまいますので、自分で分かりやすい名前を付けておくとよいようです。これはユニオンクエリの部分に任意のクエリ名を振るようなものです。ユニオンクエリ内の特定のフィールドを扱う場合、「QUNI.1月」といった表記で指定することもできます。

  • 上記のSQL文は、ユニオンクエリを使ってはいますが、全体がUNIONではなく一部分ですので、Access上では”選択クエリ”として扱われます(ナビゲーションウィンドウ上のアイコンで確認できます)。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved