新しく質問する

Accessユニオンクエリーで2つのテーブルを集計

役に立った:0件
  • 質問者:goookeiko
  • 投稿日時:2011/07/06 18:00
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

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
このような結果になってしまうのですが・・

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:0件)
  • 参考になった:0件
  • 回答者:30246kiku
  • 回答日時:2011/07/06 21:28

#1~#3です。

私は退散します。

解決に一番近いものだそうです。

質問者さんの記述に対して、なぜ汗を書く必要があるのかわかりませんが・・・

通報する

  • 参考になった:0件
  • 回答者:DexMachina
  • 回答日時:2011/07/06 21:01

まず、提示された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)保存して閉じる


・・・以上です。

通報する

  • 参考になった:0件
  • 回答者:30246kiku
  • 回答日時:2011/07/06 20:39

#1、#2です

大事なものが抜けてましたね

各 SELECT で FROM が抜けてましたね。

SELECT Aテーブル.コード1 AS コード,Aテーブル.値 FROM Aテーブル

のように


がんばっていきましょう

動いたっていう部分は、疑いもなく流用してしまうので・・・ごめんなさい

通報する

  • 参考になった:0件
  • 回答者:30246kiku
  • 回答日時:2011/07/06 20:29

#1です。補足です

UNION だと 同じレコードがあったら1つにまとめられるので
同じものがあっても、別として扱いたい時には、
UNION ALL にします。

通報する

  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:30246kiku
  • 回答日時:2011/07/06 20:23

おしい。もう少しです。


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 コード;

でも、大丈夫だと思います。

通報する

  
このQ&Aは役に立ちましたか?(役に立った:0件)

このページのトップへ

Facebook公式ページ

公式Twitter