• 締切済み

Access クエリについて

Accessのクエリについて質問です。 やりたい作業は簡単にいうと、以下のとおりです。 (1)品物データマスタ(テーブル) 品番   品物名称 0001    りんご 0002    みかん 0003    ぶどう 続く (2)注文品(テーブル) 顧客番号  顧客名   品番   品物名称   注文数 5001     アサノ    0001    りんご      2 5001     アサノ    0003    ぶどう      1 5002     イトウ    0001    りんご      4 5002     イトウ    0002    みかん      3 つづく (3)作りたい一覧表(最後は一覧表をexcelに戻したいなと) 顧客毎に品物一覧表に注文数を反映させたい。 品物一覧表にはすべての品名が記載されており、該当品の横に注文数がくる。 *はじめはexcelでやれるかなと思ったのですが、Accessのほうがいいのかなと思い、挑戦しています。説明不足の点がありましたらご指摘ください。 よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

質問は尻切れみたいでよく判らない。 まずアクセスのテーブルとクエリの役割がよくわかってないのでは。 アクセスは (1)根幹情報ーーーこの場合では 注文について 誰が 顧客 何を 品物 いくら 注文数 をテーブルに記録する (2)付帯情報ーわかりやすくするための対応情報 コードとー内容の対応が多い   顧客番号ー顧客名   品番ー品物名称 などを整理して考えること。 注文品テーブルはそういう意味ではそぎ落とした情報ではない。 テーブルは情報を結合して注文品テーブルのようなのはクエリで作ると考えること。 その際テーブル作成入力になくてはならない解説的名称(顧客名y品物名称など)の取り扱いは、入力原書などとの慣例で考慮しないとならない。 ー 注文データを、 顧客別ー品物別   にまとめたいということか。 注文データはどういう形式か書かないで質問して無いか。 最低ではコード(顧客番号と品番)と注文数量で良いのだが、冗長性(顧客名や品物名)を持たせる場合もある。 ーーー まずアクセスの本なりをよく読むこと。特にテーブルの作り方の部分を。 質問の回答からアクセスの学習を始めようというのは無為がある。

77panda
質問者

お礼

ご指摘ありがとうございました。 顧客情報管理や○○にあう条件を抽出するなど、簡単な部分は作業できるのですが、 今回自分が思い描いている表をつくるとなるとVBAを作成する際の考え方が勉強不足のため、 要点不足の質問になってしまったかと思います。 もう一度、入門書を読み直してみます。 ありがとうございましたm(_ _)m

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.4

>SQLのところにコピペすればよいのでしょうか? そうです。(Access2000では)クエリのSQLビューです。 テーブル名、項目名を正しく修正した後、実行してください。

77panda
質問者

お礼

ありがとうございます! さっそく試してみます(*^_^*)

回答No.3

1、Accessはデータを重複して記録しません。 テーブル:顧客マスター [顧客番号][顧客氏名] 5001_______アサノ 5002_______イトウ テーブル:品番データマスター [品番][品物名称] ____1__リンゴ ____2__みかん ____3__ぶどう テーブル:注文品 [注文番号][顧客_顧客番号][品物データ_品番][注文数] ________1___________5001________________1_______1 ________2___________5001________________3_______1 ________3___________5002________________1_______1 ________4___________5002________________2_______1 ________5___________5001________________1_______1 ________6___________5002________________1_______1 *列[注文番号]は、注文品を発生順に並べるために必要です。 *仮に、こういうシリアル番号がないと並びは保証されません。 質問の場合、<データを重複記録しない>のならば必要なテーブルは3つです。 少し、戸惑われるかも知れませんが、最初から原則は守られたがよいと思います。 2、注文品の顧客名と品物名称の表示はクエリの役割り。 SELECT  注文品.顧客_顧客番号,  顧客マスター.顧客氏名,  注文品.品物データ_品番,  品物データマスター.品物名称,  注文品.注文数 FROM  (注文品 LEFT JOIN 顧客マスター ON 注文品.顧客_顧客番号 = 顧客マスター.顧客番号)  LEFT JOIN  品物データマスター ON 注文品.品物データ_品番 = 品物データマスター.品番; これで図のように表示されます。 図が、SQLデータベースにおいて<データを重複記録しない>でもよい理由を示しています。 3、顧客毎の注文数合計もクエリの役割り。 SELECT DISTINCT  クエリ1.顧客_顧客番号,  クエリ1.顧客氏名,  クエリ1.品物データ_品番,  クエリ1.品物名称,  Sum(クエリ1.注文数) AS 注文数合計 FROM クエリ1  GROUP BY クエリ1.顧客_顧客番号, クエリ1.顧客氏名, クエリ1.品物データ_品番, クエリ1.品物名称  HAVING (((クエリ1.顧客_顧客番号)=5001))  ORDER BY クエリ1.品物データ_品番; これで図のように表示されます。 なお、全ての顧客を表示する場合は、HAVING節が不要です。 SELECT DISTINCT  クエリ1.顧客_顧客番号,  クエリ1.顧客氏名,  クエリ1.品物データ_品番,  クエリ1.品物名称,  Sum(クエリ1.注文数) AS 注文数合計 FROM クエリ1  GROUP BY クエリ1.顧客_顧客番号, クエリ1.顧客氏名, クエリ1.品物データ_品番, クエリ1.品物名称  ORDER BY クエリ1.顧客_顧客番号, クエリ1.品物データ_品番;

77panda
質問者

お礼

f_a_007様 ご回答ありがとうございます。 データベースの構造や考え方をまだ理解しきれておらず、お恥ずかしい限りです(-"-) さっそく試してみます。 ご丁寧な回答をいただきありがとうございました。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

こう言うことでしょうか。 SELECT B.顧客番号, B.品番, B.名称, C.注文数 FROM ( SELECT A.顧客番号, T_物品.品番, T_物品.名称 FROM T_物品, (SELECT 顧客番号 FROM T_注文品 GROUP BY 顧客番号) A ) B LEFT JOIN T_注文品 C ON B.顧客番号 = C.顧客番号 AND B.品番 = C.品番 ORDER BY B.顧客番号,B.品番 --- この場合、顧客テーブルがあればもっと簡単になります。 SELECT A.顧客番号, T_物品.品番, T_物品.名称 FROM T_物品, (SELECT 顧客番号 FROM T_注文品 GROUP BY 顧客番号) A ここで、顧客と品番のすべての組み合わせを求めていますので T_顧客 があれば SELECT * FROM T_物品, T_顧客 となります。 また、注文品テーブルに物品名称は不要です。 (物品テーブルより取得可能のため) 同様に、顧客テーブルを作れば、顧客名も不要です。

77panda
質問者

補足

o chi chi 様 ご回答ありがとうございます。 初心者すぎて、どこに上記の式をいれればよいのかご教示いただけますでしょうか? SQLのところにコピペすればよいのでしょうか?

  • yhc3594
  • ベストアンサー率27% (25/92)
回答No.1

概略   注文品(テーブル)から品番毎の加算値を参照されたいと言う事と推察致します。 例.   SELECT DISTINCTROW Sum(注文品.注文数) AS 合計注文数 FROM 注文品 GROUP BY   品番; で如何でしょうか?

77panda
質問者

補足

yhc3594様 ご回答ありががとうございます。 すみません、ほぼAccess初心者でして、どのタブを開いていって上記の式を入れればよいのでしょうか(>_<)?? お手数ですがご教示くださいませ(-"-)

関連するQ&A