• ベストアンサー

MS ACCESS 商品価格変更時の該当価格抽出方法の設定について

私はACCESS初心者です。 会社用で商品受注履歴を閲覧出来る仕組みをACCESSにて、運用しております。 商品価格変更時の設定方法について質問させて下さい。 以前こちらでの類似質問履歴を参照させて頂き、下記のテーブルを作成しました。 テーブル名:フィールド内容 (1)商品マスター:商品ID、商品名 (2)価格マスター:商品ID、商品名、価格(単価)、適用開始日、適用終了日 (3)受注マスター:商品ID、商品名、販売日、数量 クエリ名:フィールド内容 (4)受注閲覧:受注ID、商品名、価格(単価)、数量、販売日 使用方法: (4)受注閲覧に、商品名、販売日(例:2007/7/1~2007/8/1)を入力し、 (3)受注マスターから、その期間に販売日設定された注文情報、およびその期間の商品価格を抽出する。 商品の価格変更時は、(2)価格マスターで商品ID・価格を新規入力しますが、 旧新価格とも商品名(主キー)が同じな為、(4)受注閲覧に販売日を入力した際、両方とも表示されてしまいます。 この時、「(2)価格マスター適用期間」の商品価格のみを引っ張り、(4)受注閲覧に表示出来る様にしたいのです。 色々と調べましたが、具体的な抽出条件が分からず、大変困っております。 是非アドバイスをお願い致します。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

このテーブル構造を提案したという回答には単価の参照方法も載っていたのでは・・・ 受注閲覧クエリは受注と価格マスタを商品IDで結合したクエリにし 販売日の抽出条件欄に Between 適用開始日 and 適用終了日 と書きます。これで販売日の単価を取ってこれます なおテーブルにはまだ問題があります下のように変えてください (1)商品マスター:商品ID、商品名 (2)価格履歴:商品ID、価格(単価)、適用開始日、適用終了日 (3)受注:商品ID、販売日、数量 マスタは半固定的な基本データを集めたテーブルにつけます 履歴や受注のようなものには使いません 特に受注は取引記録ですからマスタと反対に位置するトランザクションテーブルです 商品マスタがあるときそれを参照するテーブルには商品IDのみを 参照キーとしておきます 商品名を取り込んではいけません

sou51
質問者

お礼

早速のアドバイスを頂き、有難うございます。 >受注閲覧クエリは受注と価格マスタを商品IDで結合したクエリにし >販売日の抽出条件欄に >Between 適用開始日 and 適用終了日と書きます。 この方法で希望通りの仕組みを作る事が出来ました。 行き詰っていたので、本当に助かりました! 有難うございました!!

その他の回答 (1)

回答No.1

>商品の価格変更時は、(2)価格マスターで商品ID・価格を新規入力しますが、 >旧新価格とも商品名(主キー)が同じな為、・・・ 本当に主キーは「商品名」ですか? 「商品ID」の間違いではないですか? でなければ、主キーが一意とならない(重複する)ため価格マスターのレコード保存ができないのでは? また商品名を主キーとするならば、商品マスターと価格マスターを分ける必要がないのでは? さらにIDを設定する意味がないのでは? 以下は、商品IDが主キーとしての参考意見です。 適用期間が重複する、同一商品異価格が存在するのであれば、 受注閲覧クエリに、商品IDを加え、抽出条件に以下を入力します。 In(SELECT 商品ID FROM 価格マスター WHERE 適用開始日>=#2007/7/1# And 適用終了日<=#2007/8/1) なお、日付は例示された販売日の期間を入れていますので、期間が変わればその期間を入れてください。 適用期間が重複する、同一商品異価格が存在しないのであれば、従来運用で結果が出るはずです。 個人的には商品名が主キーであるならば、その構造から見直す必要があるのではと考えます。 ただ、他の方からよい回答があるかもしれませんのであしからず。

sou51
質問者

お礼

御回答有難うございます。 申し訳ございません、主キーは「商品ID」の間違いでした。 丁寧なアドバイスを頂き、誠に有難うございました。 今回質問させて頂いた件に関しましては、 前項の方法にて解決致しました。