- 締切済み
アクセス 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の薬品コードを結合しても、両方の薬品コードを表示 できるような結合プロバディはないようにおもうのですが。 テーブルにしてからクエリにしないといけないのか、 そのあたりもわかりませんが教えてください。 よろしくお願いします。 質問内容書くときはうまくいっているのに、投稿だと線がずれているんですが、わかりますでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1416)
クエリ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
- o123459876
- ベストアンサー率59% (19/32)
アクセスは使ったことないので、参考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 --------------------------------------------------
- DexMachina
- ベストアンサー率73% (1287/1744)
本題から反れますが、 > 質問内容書くときはうまくいっているのに、投稿だと線がずれている こちらのサイトへのアップ時に、連続する半角スペースは削除されてしまいますので、 空白の確保には全角スペースを使用します。 (あとは、ブラウザの設定で、入力部とそれ以外でのフォント設定の違いによっても、 ずれは生じるようです) ・・・続いて本題ですが、 > 両方の薬品コードを表示できるような結合プロバディはない 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'の同じ結合フィールドのレコードだけ を含める。」を選択して「→」表示にします。
お礼
実は非重複化からの下りがわからなくなったのですが、 A,Bクエリにある薬品コードとそれ以外の薬品コードがまとまってる、すべての薬品コードというテーブルがあるので、それと、図のようにやってみましたら、うまくいきました。図があると便利でわかりやすいですね。 あとは0のなった薬品コードの表示はしなくていいので、抽出条件にnot 0といれて完成できました。ありがとうございました。
お礼
難しい方のやり方にもレス回答ありがとうございます。こちらも挑戦してみたいやり方です。