• 締切済み

アクセス 2つのクエリーの集計について

A: 選択クエリ|薬品コード|名称|数量|        | 001  |A  |1  | | 002  |B  |2  | | 003  |C  |3  | B: 選択クエリ|薬品コード|名称|数量|       | 001  |A  |1  | | 003  |C  |2  | | 004  |D  |3  | という2つのクエリから、 |     A   |    B |合計| |薬品コード|名称|数量|薬品コード|名称|数量| | | 001  |A  |1  | 001   |A |1  |2  |  | 002  |B  |2  | |  |  |2 |  | 003  |C  |3  | 003   |C |2  |5  |  |     |  |  | 004   |D  |3  |3  | というように、2つのクエリの結果も表示し、合計も表示 できるようなクエリの作り方を教えてください。 AとBの薬品コードを結合しても、両方の薬品コードを表示 できるような結合プロバディはないようにおもうのですが。 テーブルにしてからクエリにしないといけないのか、 そのあたりもわかりませんが教えてください。 よろしくお願いします。  質問内容書くときはうまくいっているのに、投稿だと線がずれているんですが、わかりますでしょうか?  

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

クエリA→クエリBと、クエリB→クエリAをUNIONします。 (1)クエリ:Q1 SELECT A.薬品コード AS KEY, A.薬品コード AS Aコード,A.名称 AS A名称,A.数量 AS A数量, B.薬品コード AS Bコード,B.名称 AS B名称,B.数量 AS B数量 FROM クエリA AS A LEFT JOIN クエリB AS B ON A.薬品コード=B.薬品コード UNION SELECT B.薬品コード AS KEY, A.薬品コード AS Aコード,A.名称 AS A名称,A.数量 AS A数量, B.薬品コード AS Bコード,B.名称 AS B名称,B.数量 AS B数量 FROM クエリA AS A RIGHT JOIN クエリB AS B ON A.薬品コード=B.薬品コード (2)上記クエリを元に作るクエリ SELECT Aコード,A名称,A数量,Bコード,B名称,B数量, Nz(A数量,0)+Nz(B数量,0) AS 合計 FROM Q1 ORDER BY KEY

回答No.2

アクセスは使ったことないので、参考URLを元に作りました。 実行はしてません。 -------------------------------------------------- select a.薬品コード as 薬品コードa ,a.名称 as 名称a ,a.数量 as 数量a ,b.薬品コード as 薬品コードb ,b.名称 as 名称b ,b.数量 as 数量b ,Nz(a.数量,0) + Nz(b.数量,0) as 合計 from a left join b on a.薬品k-ド = b.薬品コード union select a.薬品コード as 薬品コードa ,a.名称 as 名称a ,a.数量 as 数量a ,b.薬品コード as 薬品コードb ,b.名称 as 名称b ,b.数量 as 数量b ,Nz(a.数量,0) + Nz(b.数量,0) as 合計 from a rigth join b on a.薬品k-ド = b.薬品コード order by 1 --------------------------------------------------

参考URL:
http://homepage2.nifty.com/mathpara/programing/access_fulljoin.htm
harunainai
質問者

お礼

難しい方のやり方にもレス回答ありがとうございます。こちらも挑戦してみたいやり方です。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

本題から反れますが、 > 質問内容書くときはうまくいっているのに、投稿だと線がずれている こちらのサイトへのアップ時に、連続する半角スペースは削除されてしまいますので、 空白の確保には全角スペースを使用します。 (あとは、ブラウザの設定で、入力部とそれ以外でのフォント設定の違いによっても、  ずれは生じるようです) ・・・続いて本題ですが、 > 両方の薬品コードを表示できるような結合プロバディはない Accessではその通りなので、  1)A・B双方の薬品コードの一覧となるテーブルかクエリを作成し、  2)上記テーブルまたはクエリと、クエリA・Bを、それぞれ「→」・「←」(SQLのLeft   JoinやRight Join)を使用して結合したクエリを作成 という手順を踏むことになります。 「1)」をクエリで対応する場合は、「ユニオンクエリ」というものを使用します。 この場合、レコードは参照専用となり、クエリもデザインビューでは表示できなく なります(SQL文を使用します)。 それでよい場合は、こちらの以前の回答を参照下さい: http://oshiete1.goo.ne.jp/qa4973084.html SQL文ではハードルが高いとか、レコードを編集する必要がある、といった場合は、 「1)」でテーブルを作成することになります。 但し、実際に作成するのはテーブルだけでは済まなくて(汗)、  ・『薬品コード』の非重複一覧となるテーブル(=上記のテーブル)  ・選択クエリAの『薬品コード』を非重複化させて上記テーブルに追加するクエリ  ・選択クエリBの『薬品コード』を非重複化させて上記テーブルに追加するクエリ   (選択クエリAからの追加結果との重複を避けるには、不一致クエリ化が必要)  ・上記テーブル、及び選択クエリA・Bを元に、目的結果を得るクエリ   (上記「2)」のクエリ) が必要となります。 (作成手順を途中まで打っていたのですが、あまりに長くなるのと、harunainaiさんが  既にクエリの作成に慣れていたら冗長すぎることにもなるため、中止しました(汗)) ※添付画像は、最終目的となるクエリのデザインビュー(イメージ)です。   『数量』はNull(空白)の場合もあるため、『合計』にはNz関数を使用しています。  『薬品コード一覧』テーブルとクエリA・Bの結合線はフィールドのドラッグ&ドロップで  作成し(「-」の状態)、その線の中央辺りをダブルクリックして開く『結合プロパティ』  ダイアログで「'薬品コード一覧'の全レコードと'A'の同じ結合フィールドのレコードだけ  を含める。」を選択して「→」表示にします。

harunainai
質問者

お礼

実は非重複化からの下りがわからなくなったのですが、 A,Bクエリにある薬品コードとそれ以外の薬品コードがまとまってる、すべての薬品コードというテーブルがあるので、それと、図のようにやってみましたら、うまくいきました。図があると便利でわかりやすいですね。 あとは0のなった薬品コードの表示はしなくていいので、抽出条件にnot 0といれて完成できました。ありがとうございました。