• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:売価変更がある商品の売上金額)

売価変更がある商品の売上金額

このQ&Aのポイント
  • 売価変更がある商品の売上金額を計算する方法について教えてください。
  • 商品マスタと売上テーブルには、商品番号、新価格、旧価格、新価格適用日の情報があります。日付を入力してクエリを実行すると、日ごとの売上金額を求めることができます。
  • フォームの日付が新価格適用日よりも大きい場合は新価格が適用され、小さい場合は旧価格が適用されます。組み込む場所や方法についてのアドバイスをお願いします。

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

  • ベストアンサー
noname#60992
noname#60992
回答No.4

No1です。 2回価格が変更になるとどのようなことになるのですか? 商品番号,新価格,旧価格,新価格適用日 00000001, 120, 100,2006/10/01 00000001, 100, 90,2006/11/01 みたいなことになるのかな?  それとも、2回価格が変更になるということはないのですか? 1回も価格が変更にならないものはどのようなデータなのですか? 商品番号,新価格,旧価格,新価格適用日 00000001, 120,,2006/01/01 こんな感じでしょうか? このようなものは、どちらかといえば価格変更ログであって、 商品マスタではないと思います。 順当に考えれば商品マスタを 新規に作り直したほうが簡単だとは思います。 このあたりの問題をまったく無視して考えれば、 以下のような[売上金額クエリ]というのを作れば、 動くには動きます。(あまりお勧めしませんが) SELECT 売上テーブル.日付, 売上テーブル.商品番号, 売上テーブル.売上数, -1*([商品マスタ]![適用日]-[売上テーブル]![日付]>0)*[商品マスタ]![旧価格]-([商品マスタ]![適用日]-[売上テーブル]![日付]<=0)*[商品マスタ]![新価格] AS 販売日価格, [売上テーブル]![売上数]*[販売日価格] AS 売上金額 FROM 売上テーブル LEFT JOIN 商品マスタ ON 売上テーブル.商品番号 = 商品マスタ.商品番号; 2回以上価格変更があるなら動きません。 やはり別途テーブルを作ったほうがよいと思います。

shinp
質問者

お礼

回答ありがとうございます。 2回価格が変更になると最初の価格はなくなります。常に1世代前の価格しか持てません。 1回も変更されていないデータは以下のようになります。 商品番号,新価格,旧価格,新価格適用日 00000004, 150, 0,1900/01/01 このマスタは、ン千万である会社に作ってもらったシステムの一部です。ですので別途テーブルを作成するにはその会社にお願いしなければなりません。 なぜこんな設計になったのかは分かりません。 そんなわけで取り敢えず既存の形を変えずに考えています。 教えていただいたクエリを試してみます。

その他の回答 (3)

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

>商品マスタは商品の価格が変わるたびにレコードは増えたりしませんが。。。 >どういうことでしょうか? 価格が変わらないのならこの質問自体がないわけですから 価格は変わるわけですよね で、変わった時、前の価格はどこに書くのですか? それが旧価格?だとしたらその前の価格はどこに行ってしまうの? 要するにテーブルの設計が悪いですよと指摘しているのですが

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

いくつか問題点があるようですよ 商品マスタ マスタというのあまり変動しない半固定的なデータを集めたものにつけます また商品マスタというからには商品番号が主キーとなるテーブルでなければなりません アップされたものは商品の価格が変わるたびにレコードが増えていくものですから マスタではないですね また、価格の履歴テーブルなら旧価格フィールドは必要ありません 古い日付で旧価格のレコードが残っているはずです またそういう作りでないと売上日付に対応する価格は引っ張ってこれません 商品番号,価格,価格適用日 00000001, 100, 2005/10/01 00000001, 120, 2006/10/01 このテーブルなら商品番号が同じで売上日付より小さい最大日付のものを取ってくるということになります もうひとつの方法はNo1さんの案のように 適用開始日だけでなく終了日フィールドも設けたテーブルにするかです こっちの場合は商品番号で結合し売上日が開始日と終了日の間になる価格を取ってくる という風に抽出条件が簡単になります

shinp
質問者

お礼

回答ありがとうございます。 よくわからないのですが、 >アップされたものは商品の価格が変わるたびにレコードが増えていくものですから >マスタではないですね これは商品マスタについてのお話でしょうか? 商品マスタは商品の価格が変わるたびにレコードは増えたりしませんが。。。どういうことでしょうか?

noname#60992
noname#60992
回答No.1

このような場合は、商品マスタを 商品番号、価格、開始日、終了日、 00000001、100、20000101、20060930 00000001、120、20061001、99999999 のように作ったほうが、扱いやすいと思います。 商品番号,新価格,旧価格,新価格適用日 からそのようなテーブルを作ることも簡単にできますし、また再度価格変更があった際もそのまま対応できます。 

shinp
質問者

お礼

回答ありがとうございます。 おっしゃるとおり私もそのようなつくりであれば対応方法も分かるのですが、すでにマスタは作成してあり多量のデータが入力してあるので、できれば現状の形で対応したいと思っています。 この形では無理なのでしょうか。 よろしくお願いします。

関連するQ&A