- ベストアンサー
accessでの2つの表を使った更新のしかた
Access2003を使っています。 2つの表を使って更新をする方法が分かりません。 たとえば、キャンペーン商品(数品)の支店別(8支店)販売実績を作成するのに、下記のようなテーブルを用意した場合。 A表,売上表の項目(支店コード、商品コード、数量) B表,キャンペーン表の項目(商品コード、商品名、支店項目x8) 更新クエリでの”レコードの更新”欄で,A表の支店コードの値でB表の該当支店項目へ加算したいのですが,されません。どのようにすべきでしょうか。 IIf(支店コード=1 支店項目1+数量) と入力していますが,できていません。これではダメですか。 ご教授下さい。 これではダメだと別の方法を考えるとしたらどうすべきでしょうか?。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1のご回答にケチを付けるつもりはありませんが、このような複雑なクエリー(SQL)で対処すると、例えば支店が増えた際のメンテナンスが大変です。書き直し作業よりも、書き落としが無いかのチェックが悪夢です。 そもそもテーブル設計が良くないと思われます。 質問にある「表」ですが、データ保存場所としてのテーブルと、テーブル(複数の場合もある)に対する処理(クエリー)を行った結果を混同していないでしょうか?もしB表がテーブルを意味するならば、「支店項目x8」みたいなフィールドの持ち方は、特殊な理由がない限り、避けた方が良いでしょう。 DBの設計としては 「支店テーブル」「商品テーブル」「キャンペーンテーブル」「売上票テーブル」 などにし、クロス集計クエリーなどで結果を出せば、仮に支店が増えても、クエリー(SQL)は無修正で対応されます。一例としてSQL文を示せば TRANSFORM Sum(クエリ3.金額) AS 金額の合計 SELECT クエリ3.キャンペーン名, クエリ3.商品名, Sum(クエリ3.金額) AS [合計 金額] FROM クエリ3 GROUP BY クエリ3.キャンペーン名, クエリ3.商品名 PIVOT クエリ3.支店名; 結果の画像も添付します。
その他の回答 (3)
- ShowMeHow
- ベストアンサー率28% (1424/5027)
ANo2です。 支店テーブルとグループ化したクエリを連結させれば、 すべての支店のデータをひとつの表にすることもできます。 レコードが全くない場合ははヌル(ブランク)表示になりますが、、、
お礼
ありがとうございます。 操作が慣れなくて、理解力不足ですがトライしてみます。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
質問の回答になっていませんが、 DBでこのようなデータを閲覧したい場合、キャンペーン商品で選択した売り上げを、支店ごとにグループ化するのが一般的です。 (そのほうが簡単です。)
お礼
ご回答ありがとうございました。 そう思っていましたが、キャンペーンの商品で売っていない支店を分かるようにしたいと思いこのような設計にしました。
- nora1962
- ベストアンサー率60% (431/717)
支店コードが"1"~"8"だと仮定して UPDATE B SET B.支店1 = NZ(B.支店1,0) + NZ(DSUM( "数量", "A", "支店コード=""1""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店2 = NZ(B.支店2,0) + NZ(DSUM( "数量", "A", "支店コード=""2""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店3 = NZ(B.支店3,0) + NZ(DSUM( "数量", "A", "支店コード=""3""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店4 = NZ(B.支店4,0) + NZ(DSUM( "数量", "A", "支店コード=""4""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店5 = NZ(B.支店5,0) + NZ(DSUM( "数量", "A", "支店コード=""5""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店6 = NZ(B.支店6,0) + NZ(DSUM( "数量", "A", "支店コード=""6""" & " AND 商品コード=""" & B.商品コード & """"),0), B.支店7 = NZ(B.支店7,0) + NZ(DSUM( "数量", "A", "支店コード=""7""" & " AND 商品コード=""" & B.商品コード & """"),0) B.支店8 = NZ(B.支店8,0) + NZ(DSUM( "数量", "A", "支店コード=""8""" & " AND 商品コード=""" & B.商品コード & """"),0) みたいな感じでどうでしょう。
お礼
早々のご回答ありがとうございます。 試みているのですが、うまくいきません。 もう少しトライしてみます。
お礼
ご回答ありがとうございます。画像付きは理解しやすくていいですね。 10日間、Accesの本やWebで検索しても理解できず悩んでいましたが、この説明でとても理解できました。 感謝します。