概要
| この記事の結論 Accessのユニオンクエリは、複数のSELECT結果を縦につなぎます。[クエリ デザイン]からSQLビューを開き、SELECT文をUNIONで結びます。UNIONは結果行の重複を除き、UNION ALLは重複も残します。 |
この記事でわかること
- 列数と列の順番を揃える
- SQLビューでUNION ALLを作る
- UNIONとUNION ALLの違いを確認する
- 並び順と条件を正しい位置に書く
この記事の主な内容
- UNIONは行を縦に連結する
- 列数と列の順番を揃える
- SQLビューでUNION ALLを作る
- UNIONとUNION ALLの違いを確認する
- 並び順と条件を正しい位置に書く
- 集計と運用上の制約を確認する
- よくある質問
想定読了時間:約8分
1 UNIONは行を縦に連結する
Accessのユニオンクエリは、複数のSELECT結果を縦につなぎます。[クエリ デザイン]からSQLビューを開き、SELECT文をUNIONで結びます。UNIONは結果行の重複を除き、UNION ALLは重複も残します。
商品情報と売上を横へつなぐJOINとは目的が異なります。
月別の同じ構造の表をまとめる場面などで使えますが、結果を表示するだけで元テーブルが統合されるわけではありません。

2 列数と列の順番を揃える
T_売上9月とT_売上10月から、売上日・商品コード・金額の順に取得します。
各SELECTの列数は同じにし、対応する位置のデータ型や意味を揃えてください。
SELECT *は列追加の影響を受けるため、必要な列を明示する方が保守しやすくなります。
列名が同じでも、位置が違うと意図しない組み合わせになります。
結果の列名は原則として最初のSELECTの名前を使うため、別名も先頭で整えます。

3 SQLビューでUNION ALLを作る
取引データは同じ日付・商品・金額の別取引もあり得ます。
件数を勝手に減らさないため、まずUNION ALLで結合する例を示します。
元の表名や列名は実際の定義へ置き換えてください。

操作手順
1. 新しいクエリを作りSQLビューを開きます。
2. 2つのSELECTとUNION ALLを入力します。
3. Q_売上統合として保存します。
4. 結果件数が2表の合計と一致するか確認します。
サンプルコードと式
SELECT [売上日], [商品コード], [金額] FROM [T_売上9月]
UNION ALL
SELECT [売上日], [商品コード], [金額] FROM [T_売上10月]
ORDER BY [売上日], [商品コード];

4 UNIONとUNION ALLの違いを確認する
UNIONの重複判定は、選択した列全体の値に対して行われます。
主キーを選択しなければ、別取引でも選択列がすべて同じなら1行になることがあります。
表示上の重複を減らしたい場合と、取引件数を保持したい場合を区別しましょう。
出所を示す固定文字列を追加すると、月やシステムの判別が容易です。
ただし出所が違えば別の結果行になるため、UNIONの重複除外結果も変わります。
サンプルコードと式
SELECT “9月” AS 出所, [売上日], [金額] FROM [T_売上9月]
UNION ALL
SELECT “10月”, [売上日], [金額] FROM [T_売上10月];

5 並び順と条件を正しい位置に書く
全体の並び順は末尾のORDER BYで指定します。
各SELECTのWHEREはその表の対象範囲を絞る条件です。
片方にだけ条件を入れると、もう片方の不要データが残るため確認してください。
一方の表に存在しない列は、Null AS 列名のように位置を合わせる方法があります。
ただし型の推定や演算に影響するため、最初のSELECTで意味と型が明確な列構成にすることが重要です。

既存Accessへの影響を判断できない場合
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
6 集計と運用上の制約を確認する
UNION結果は通常、直接編集する用途には使えません。
保存したユニオンクエリを別の選択・集計クエリの入力にし、合計金額と件数を元データと照合します。
毎月新しいテーブルを作り続けるとSQLの修正が増えます。
継続運用では1つの売上テーブルに日付を持たせる設計も検討しましょう。
UNIONは異なる保存先を読み取る手段であり、保存設計の問題をすべて解決する機能ではありません。

7 よくある質問
列数と順番、意味と型を揃えます。
名前は最初のSELECTの列名が基準です。
UNIONが選択列全体の重複を除外している可能性があります。
必要ならUNION ALLを使います。
通常は直接編集できません。
元表や別の更新処理で行います。
まとめ
毎月新しいテーブルを作り続けるとSQLの修正が増えます。
継続運用では1つの売上テーブルに日付を持たせる設計も検討しましょう。
UNIONは異なる保存先を読み取る手段であり、保存設計の問題をすべて解決する機能ではありません。
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
参考情報
Microsoft公式資料を参照しています。サンプルは説明用の架空データです。
Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。
Microsoft:UNION
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/union-operation-microsoft-access-sql
Microsoft:複数クエリの結合
https://support.microsoft.com/en-us/access/use-a-union-query-to-combine-multiple-queries-into-a-single-result