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
このような結果になってしまうのですが・・
回答(5件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
まず、提示された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)保存して閉じる
・・・以上です。
#1、#2です
大事なものが抜けてましたね
各 SELECT で FROM が抜けてましたね。
SELECT Aテーブル.コード1 AS コード,Aテーブル.値 FROM Aテーブル
のように
がんばっていきましょう
動いたっていう部分は、疑いもなく流用してしまうので・・・ごめんなさい
No.1ベストアンサー20pt
おしい。もう少しです。
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 コード;
でも、大丈夫だと思います。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











