• ベストアンサー

Access 2つのテーブルで数量の比較をしたい

Access2007を使用しています。 2つのテーブルに品番と数量がそれぞれ登録されています。 【テーブルA】 品番  / 数量 あ001/ 4 い001/ 5 あ001/ 1 【テーブルB】 品番  / 数量 う000/ 10 あ001/ 1 い001/ 4 い001/ 1 この2つのテーブルから、品番ごとの数量を比較して、異なるデータの品番と差異を取り出したいのです。 【結果】 あ001/ 4(←A-B=4) う000/ 10 A,Bのテーブルで品番ごとに集計した結果から、数量が不一致のものを取り出す方法がわかりません。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.1

■01.AとB用の集計クエリをそれぞれ作成 作成理由:同じテーブルに同品番が存在している事から先に集計クエリを用意する ※テーブルAで言えば「あ001」が重複/テーブルBで言えば「い001」が重複 集計クエリー:品番(グループ)/数量(合計)で、AとB用を作成 (A-SumQuery,B-SumQueryとでもしておく) ■02.上記集計クエリーに対し、品番一致クエリと品番不一致クエリのSQL文を構想しておく  ※クエリ自体は未作成(SQL文を把握するのに一時的に作成し確認) 02.01.品番一致するものでAB値の計算を行い計算値が0の物は除外するSQL文を構想する <例SQL文> SELECT [A-SumQuery].A品番, [A数量の合計]-[B数量の合計] AS 小計 FROM [A-SumQuery] INNER JOIN [B-SumQuery] ON [A-SumQuery].A品番 = [B-SumQuery].B品番 WHERE ((([A数量の合計]-[B数量の合計])<>0)) 02.02.テーブルAから見たテーブルBに存在しない品番不一致SQL文を構想する <例SQL文> SELECT [A-SumQuery].A品番, [A-SumQuery].A数量の合計 FROM [A-SumQuery] LEFT JOIN [B-SumQuery] ON [A-SumQuery].A品番 = [B-SumQuery].B品番 WHERE ((([B-SumQuery].B品番) Is Null)); 02.03.テーブルBから見たテーブルAに存在しない品番不一致SQL文を構想する <例SQL文> SELECT [B-SumQuery].B品番, [B-SumQuery].B数量の合計 FROM [B-SumQuery] LEFT JOIN [A-SumQuery] ON [B-SumQuery].B品番 = [A-SumQuery].A品番 WHERE ((([A-SumQuery].A品番) Is Null)); ■03.02で構想したSQL文をユニオンクエリで一元化する 品番一致クエリ(02.01)と、品番不一致A(02.02)と、品番不一致B(02.03)の3種のクエリを、ユニオンで纏め上げる <例SQL> SELECT [A-SumQuery].A品番 AS 品番, [A数量の合計]-[B数量の合計] AS 数量 FROM [A-SumQuery] INNER JOIN [B-SumQuery] ON [A-SumQuery].A品番 = [B-SumQuery].B品番 WHERE ((([A数量の合計]-[B数量の合計])>0)) UNION SELECT [A-SumQuery].A品番, [A-SumQuery].A数量の合計 FROM [A-SumQuery] LEFT JOIN [B-SumQuery] ON [A-SumQuery].A品番 = [B-SumQuery].B品番 WHERE ((([B-SumQuery].B品番) Is Null)) UNION SELECT [B-SumQuery].B品番, [B-SumQuery].B数量の合計 FROM [B-SumQuery] LEFT JOIN [A-SumQuery] ON [B-SumQuery].B品番 = [A-SumQuery].A品番 WHERE ((([A-SumQuery].A品番) Is Null)); ■まとめ それぞれの役割を持ったクエリ(SQL文)を作成し、ユニオンクエリとして纏め上げて利用する

taiyou55
質問者

お礼

細かく教えていただき大変助かりました。 おかげさまでうまく出来ました。ありがとうございました。

その他の回答 (1)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

>A,Bのテーブルで品番ごとに集計した結果から、数量が不一致のものを取り出す方法がわかりません。 この質問と、お望みの結果は異なりますよね? >あ001/ 4(←A-B=4) >う000/ 10 集計結果を取り出すのではく 集計した差分を取り出そうとしていますね。 A-B=4 とされているので であれば、う000は A-B=-10ではないでしょうか? あ001/ 4 う000/ -10 差を取るのであれば、どちらか基準側が必要ですので A-Bで差が0以外を抽出すると SQLビュー SELECT 品番, 差分 from ( SELECT 品番, Sum(数量) AS 差分 FROM (SELECT テーブルA.品番, テーブルA.数量 FROM テーブルA union all SELECT テーブルB.品番, テーブルB.数量 * -1 FROM テーブルB) GROUP BY 品番 ) where 差分 <> 0 order by 品番 2007での結果 品番 差分 あ001 4 う000 -10 結果をこちらで読み替えました 意味が違っていたら、読み捨ててください。 また、SQlビューに貼り付けて実行できるように 1SQLで書きましたが 個別にクエリーにされても 問題ありません。

taiyou55
質問者

お礼

>であれば、う000は A-B=-10ではないでしょうか? お恥ずかしいです。そのとおりです。間違えていました。 そしてうまくいきました!大変助かりました。ありがとうございました。

関連するQ&A

  • Access2つのテーブルの差額を出すピボット

    Access2007を使用しています。 以下のような2つのテーブルがあります。 <テーブルA> 区分 品番 金額  数量 A  001 10000  10 A  S12 5000   5 A  002 8000   8 A  001 6000   6 <テーブルB> 区分 品番 金額  数量 B  001 2000  2  B  S12 3000  3 このデータを元に、以下のような結果をピボットで表示したいと思っています。       区分       A  |  B   |合計 品番  数量 金額|数量 金額 |数量 金額 差額(A-B) 001 16 16000| 2 2000 | 18 18000 14000 002 8 8000 |      | 8  8000  8000 S12 5 5000 | 3 3000 | 8  8000  2000 テーブルAとBをユニオンクエリでまとめ、ピボットを作って みたのですが、差額の部分が出せず・・・ どうぞよろしくお願いします。

  • Accessクエリーで両方のテーブルの全てのデータを表示することは可能ですか?

    Accessの本来の主旨にあってないと思うのですが・・・。 とあるデータの入ったテーブルをA:1月分・B:2月分と分けて作成して おります。 この2つのテーブルをクエリーでひとつのデータにまとめたいと思い、 品番をキーにクエリーを作成しましたが、結合の種類ではA・B両方一致した データか、AのすべてのデータとBの一致したデータというように片方を 主にしたデータしか表示することができません。 AにはあるがBにはない、AにはないがBにはあるといった具合に、 一致したデータはもちろんのこと、一致しないデータも片方だけではなく 両方のテーブルのデータを表示することは可能でしょうか? そもそも、同じ構造のテーブルならひとつにまとめてクロス集計クエリーで 品番別に月単位で表示するようにしたらよいのでしょうか? できればテーブルはひとつにまとめたくないのですが・・・。 Accessの構造をあまり知らなくてごめんなさい。 よい解決策があったら教えてください。

  • 2つのACCESSファイルのテーブルを比較する方法

    ACCESSデータベースファイル1.accdbの各テーブル(データ)と ACCESSデータベースファイル2.accdbの各テーブル(データ)は 完全に一致するはずですが、 両者の各テーブル(複数あり)が一致するかどうかを簡単に 確認するにはどうすればよいでしょうか。 なお、テーブルの生成方法の違いか何かの理由で 両者のファイルサイズは一致していません。 また、バイナリ比較でも一致していません。 ACCESSの機能で確認できるのであればACCESSを使用した方法で、 ACCESSの機能だけでは難しければACCESSのVBAを利用した方法で、 それでも難しければ他のツールや方法でも構いません。 よろしくお願いします。

  • アクセスで消し込みがしたい

    アクセス初心者です。 二つのテーブルがあります。 テーブル1 品番 得意先 数量 チェック 111  A    1 111  A    1 111  A    2 111  B    1 222  A    1 テーブル2 品番 得意先 数量 チェック 111  A    1 111  A    1 111  A    1 111  A    1 111  A    1 222  A    1 この二つのテーブルを比較して品番、得意先、数量の同じものに チェックボックスをTrueにしたいのです。つまり テーブル1 品番 得意先 数量 チェック 111  A    1  レ 111  A    1  レ 111  A    2 111  B    1 222  A    1  レ テーブル2 品番 得意先 数量 チェック 111  A    1  レ 111  A    1  レ 111  A    1 111  A    1 111  A    1 222  A    1  レ の状態にしたいのです。更新クエリーを使って見ましたが テーブル1は希望通りですがテーブル2は全てにチェックが ついてしまいました。当たり前ですね。(^_^;) VBAは使ったことがないです。よろしくお願いします。

  • ACCESSにて2つのテーブルの比較

    2つのテーブルA,テーブルBがあります。テーブルBのデータ以外のデータを選ぶにはどうのようにすれば良いのでしょうか? テーブルA data--- aaaa bbbb cccc dddd aaaa cccc テーブルB data--- aaaa bbbb 欲しい結果 テーブルA data--- cccc dddd cccc よろしくお願い致します。

  • クロス集計クエリの結果をテーブルにしたい

    こんにちは。ACCESS 97、ほぼ初心者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1445032 こちら様の質問の、便乗質問です(質問者様とは関係ありません)。 品番,倉庫,数量 4944,F,190 4960,A,25 4960,B,6 4960,C,72 4960,D,20 4960,E,50 4960,F,3 4962,C,26 4962,E,4 4963,C,5 4964,A,4 4964,C,148 4964,E,42 4965,A,2 4965,C,5 4965,E,1 4966,C,4 4966,E,1 こんなデータからテーブルを作成し、クロス集計クエリで 品番 A B C D E F 4944 190 4960 25 6 72 20 50 3 4962 26 4 4963 5 4964 4 148 42 4965 2 5 1 4966 4 1 という結果を出し、上の質問の方法でテーブル作成すると、元データと同じテーブルが作成されます。 A、B、C、D、E、Fを列見出しにしたテーブルを作成したいのですが、教えてください。

  • エクセルのピボットテーブルで

    ピボットテーブルの表示方法についてです。 表の品名と数量からピボットテーブルを作成します。 行に品名、データ部に数量を表示させるのですが、数量が0(ゼロ)の場合には、その行自体を表示させない様にしたいのです。 元の表の方は変更等出来ないので、ピボットテーブルの方で何とか出来ないかと思います。 【元の表】 品番  数量 A001  5,000 A002    0 B001  4,500 B002    0 上記の2列からピボットテーブルを作成すます。 【ピボットテーブル】 品番  数量 A001  5,000 B001  4,500 総計  9,500 上記の様に、元の表で数量が0なら、その品番と数量の行が表示されない様にです。

  • 複数列の数量を集計したい

    こんばんは。 EXCELの集計の式についてお聞きします。 品番 日付 数量 伝票No.  数量 伝票No.  数量  伝票No. A 7/23 20 111 A 7/24 20 222 A 7/24 5 111 A 7/25 5 111 A 7/26 10 222 A 7/27 5 222 と数量が3列あります。 このデータを 品番、伝票No.(3列分まとめて)で数量を集計したいのです。 但し2列目の数量だけは引きます(数量合計=1列目-2列目+3列目) 品番 伝票No.  数量 A  111 10 A 222 25 と集計したいのですが。 EXCELの式だけでこのような事はできますか? 分かる方おられましたら、 どうぞ宜しくお願いします。

  • アクセスのクエリについて(前当期比較させたい)

    現在、アクセス2010を勉強中の超初心者です。 アクセスを用いて、前期と当期の商品売上数量比較表(得意先ごとの)を作成できないか考えております。  ■さっそくですが、以下の4つのテーブルがあったと仮定します。 テーブル(1)(商品マスター)           テーブル(2)(得意先マスター) 品コード | 品名                  店コード |  店名   1    | ○○                       A  |  あか   2    | ××                       B  |  いき   3    | △△                       C  |  うす テーブル(3)(前期売上データ)          テーブル(4)(当期売上データ) 店コード | 品コード | 売上数量         店コード | 品コード | 売上数量  A     |   1    |  10               A      |   3     |  20     A     |    3     |  15             A      |    4     |  25     B     |    1     |  17              B     |    2    |  27     :     |    :    |  :               :     |    :     |  :     ■以下のようなデータ抽出できないかを検討しています。 店コード | 品コード | 前期売上数量 | 当期売上数量   A    |    1     |     10       |     0   A    |    3      |     15       |     20   A    |   4      |     0       |     25  ◆自身で検討してみましたが、「前期に売上実績があるが、当期に売上実績がないケース」、及び「その逆のケース」についてうまく抽出できません。(上記例で言いますと、A店に対する売上で品コード1 と 品コード3 の商品売上数量比較ができませんでした。)  解決方法わかる方、ご教授のほどよろしくお願い致します。

  • CGI perlで 型番-数量のまとめかた

    品番1-数量<>品番2-数量<>品番3-数量 品番2-数量<>品番1-数量 品番4-数量<>品番1-数量<>品番2-数量<>品番5-数量 上記の構成のCSVデータがあり、品番ごとの集計をとりたいのですが 良い方法があれば教えてください。

    • 締切済み
    • CGI