Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


289 / 2272 ツリー ←次へ | 前へ→

【12230】二つのテーブルからすべてのデータを表示 M_S 12/12/26(水) 15:36 質問[未読]
【12231】Re:二つのテーブルからすべてのデータを表示 かるびの 12/12/28(金) 2:12 回答[未読]

【12230】二つのテーブルからすべてのデータを表示
質問  M_S  - 12/12/26(水) 15:36 -

引用なし
パスワード
   二つのテーブルがあります。
月間出荷抽出テーブル
製番  出荷日   出荷品名  出荷数
1001  2012/10/04  りんご    2
1002  2012/10/05  みかん    2
1003  2012/10/06  キュウイ   2
1004  2012/10/07  マンゴー   1
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1001  2012/10/10  りんご    5
1010  2012/10/11  みかん    1
1003  2012/10/12  キュウイ   1
5002  2012/10/13  さくらんぼ  2

月間売上抽出テーブル
製番  売上日   売上品名  売上数   売上金額
1001  2012/10/10  りんご    7     618000
1002  2012/10/10  みかん    1     279000
1003  2012/10/15  キュウイ   1     618000
1004  2012/10/31  マンゴー   1     279000
1005  2012/10/31  ライチ    1      87100
5006  2012/10/31  バナナ    1     500000

この二つのテーブルからユニオンクエリーを作成し
SELECT 製番,出荷日,出荷品名,出荷数,"" AS 売上数,"" AS 売上金額 FROM 月間出荷抽出
UNION SELECT 製番,"" AS 出荷日,売上品名 AS 出荷品名,"" AS 出荷数,売上日,売上数,売上金額 FROM 月間売上抽出
GROUP BY 製番;

結果
製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
1001         りんご      2012/10/10  7   618000
1001  2012/10/04  りんご    2
1001  2012/10/10  りんご    5
1002         みかん      2012/10/10  1   279000
1002  2012/10/05  みかん    2
1003         キュウイ     2012/10/15  1   618000
1003  2012/10/06  キュウイ   2
1003  2012/10/12  キュウイ   1
1004         マンゴー     2012/10/31  1   279000
1004  2012/10/07  マンゴー   1
1005         ライチ      2012/10/31  1    87100
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1010  2012/10/11  みかん    1
5002  2012/10/13  さくらんぼ  2
5006         バナナ      2012/10/31   1   500000

となってしまいます。
製番でまとめたいのです。GROUP BY 製番;の使い方がまちがいですか。ご教授願います。なお製番と品名に関連性はなく、製番は受注順となります。

製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
1001  2012/10/04  りんご    2   2012/10/10  7   618000
1001  2012/10/10  りんご    5
1002  2012/10/05  みかん    2   2012/10/10  1   279000
1003  2012/10/06  キュウイ   2   2012/10/15  1   618000
1004  2012/10/07  マンゴー   1   2012/10/31  1   279000
1005         ライチ       2012/10/31  1    87100
1007  2012/10/08  さくらんぼ  2
1008  2012/10/09  いちご    2
1010  2012/10/11  みかん    1
5002  2012/10/13  さくらんぼ  2
5006         バナナ       2012/10/31   1   500000

みたいにしたいのですが。

【12231】Re:二つのテーブルからすべてのデータを...
回答  かるびの  - 12/12/28(金) 2:12 -

引用なし
パスワード
    ユニオンクエリは、テーブルを縦にくっつけるだけですから、
出荷品名がりんごであるレコードは、月間出荷抽出テーブルに2レコード、
売上品名がりんごであるレコードは、月間売上テーブルに1レコードあるとすると、
両テーブルのユニオンクエリにおいて出荷品名がりんごであるレコードは、
2+1=3レコードとなります。

>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001         りんご      2012/10/10  7   618000
>1001  2012/10/04  りんご    2
>1001  2012/10/10  りんご    5
のようになるのは、必然です。


 得たい結果をクエリで得るのは、なかなか困難だと思います。

 得たい結果である
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/04  りんご    2   2012/10/10  7   618000
というレコードは、両テーブルを内部結合させたものです。

 他方、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1005         ライチ       2012/10/31  1    87100
というレコードは、両テーブルを右外部結合させたものです。

>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1007  2012/10/08  さくらんぼ  2
というレコードは、両テーブルを左外部結合させたものです。

 問題なのは、このレコードです。
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/10  りんご    5

 両テーブルを結合させると、内部結合でも、左外部結合でも、右外部結合でも、
製番1001は、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/04  りんご    2   2012/10/10  7   618000
>1001  2012/10/10  りんご    5   2012/10/10  7   618000 
となります。

 したがって、
>製番  出荷日   出荷品名  出荷数  売上日  売上数 売上金額
>1001  2012/10/10  りんご    5
のレコードは、両テーブルを結合させることなく、
月間出荷抽出テーブルだけから引っ張ってきたレコードです。

 つまり、得たい結果は、テーブルの結合の仕方が混在したものなのです。

 結局、クエリだけでやるなら、
   左外部結合のクエリ、
   右外部結合のクエリ、
   月間出荷抽出テーブルだけから引っ張ってくるクエリ、
   月間売上抽出テーブルだけから引っ張ってくるクエリ、
を作り、それらによるユニオンクエリを作ります。
その際、うまく抽出条件を設定し、重複しないようにする必要があります。
ただ、この抽出条件の設定は、集計クエリやサブクエリを駆使する必要がありそうであり、
かなり面倒くさそうです。


 ちなみ、レポートに表示させるのであれば、
レコードソースを、
両テーブルを左外部結合したクエリと、右外部結合したクエリとによる
ユニオンクエリとした上で、
レポートの「重複データ非表示」プロパティを「はい」に設定すれば、
御希望のことは可能ではないかと思います。

289 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free