- ベストアンサー
Accessユニオンクエリーで2つのテーブルを集計
Accessのユニオンクエリーで2つのテーブルを集計したいのですが Aテーブル コード1 値 1 5 1 2 Bテーブル コード2 値 1 1 2 3 結果 コード 値 1 8 2 3 このような結果を得ることは出来ますでしょうか? SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 このように記述すると コード 値 1 5 1 2 1 1 2 3 このような結果になってしまうのですが・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
おしい。もう少しです。 SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 を例えば「Q1」に置き換えたとすると SELECT コード, Sum(Q1.値) AS 値 FROM Q1 GROUP BY コード; で結果は得られると思います。 「コード」でグループ化して、「値」を合計(Sum) してあげれば・・・ で、Q1 部分を上記のもので置き換えると SELECT コード, Sum(Q1.値) AS 値 FROM ( SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 ) AS Q1 GROUP BY コード; でいけると思います。 なお、UNION する時は、2つ目以降は AS を書かなくても良いんで SELECT コード, Sum(Q1.値) AS 値 FROM ( SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2,Bテーブル.値 ) AS Q1 GROUP BY コード; でも、大丈夫だと思います。
その他の回答 (3)
- DexMachina
- ベストアンサー率73% (1287/1744)
まず、提示されたSQL文ですが、元のテーブルを示す「From句」が抜けています(汗) <現在> SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 <修正後> SELECT Aテーブル.コード1 AS コード,Aテーブル.値 From Aテーブル UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 From Bテーブル <修正後(省略版)> SELECT コード1 AS コード, 値 From Aテーブル UNION SELECT コード2, 値 From Bテーブル ※1つのSelect文内にテーブル/クエリが1つだけの場合、「テーブル名.フィールド名」 の「テーブル名.」部分は省略できます。 さて、本題ですが・・・私自身がそうだったのですが(汗)、「ユニオンクエリは比較的 単純な構文なのでいいけれど、集計などになると、ちょっと・・・」という場合は、 デザインビューを利用することも可能です。 1つは、「(テーブルに代えて)ユニオンクエリを元にした、新規クエリの作成」です。 もうひとつは、「ユニオンクエリそのものから、デザインビューで編集可能なクエリ」に 持っていく方法です。 前者は簡単だと思いますので省略しますが、今後のことを考えて、後者について その手順を紹介してみます。 【手順】 1)元となるユニオンクエリをSQL文で作成 (→念のため、『!』(実行)ボタンを押して結果が表示されるか確認) 2)そのSQL文の前後に、それぞれ「Select * From (」と「) As Temp」を追記 例) Select * From ( SELECT コード1 AS コード, 値 From Aテーブル UNION SELECT コード2, 値 From Bテーブル ) As Temp 3)ツールバーなどにある、デザインビューに切り替えるためのボタンをクリック 4)ユニオンクエリとして記述したクエリとそのフィールドが、通常のテーブルや クエリと同様に表示されるので、通常の選択クエリや集計クエリなどと 同様に編集 5)保存して閉じる ・・・以上です。
- 30246kiku
- ベストアンサー率73% (370/504)
#1、#2です 大事なものが抜けてましたね 各 SELECT で FROM が抜けてましたね。 SELECT Aテーブル.コード1 AS コード,Aテーブル.値 FROM Aテーブル のように がんばっていきましょう 動いたっていう部分は、疑いもなく流用してしまうので・・・ごめんなさい
- 30246kiku
- ベストアンサー率73% (370/504)
#1です。補足です UNION だと 同じレコードがあったら1つにまとめられるので 同じものがあっても、別として扱いたい時には、 UNION ALL にします。