- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLで理想原価を求めたい)
SQLで理想原価を求める方法
このQ&Aのポイント
- SQLを使用して部品の購入数パターン毎の理想原価を抽出する方法を考えています。具体的な例を挙げると、部品Aの購入数が100未満の場合は購入数パターン100とみなし、原価を100円とします。200の場合は購入数パターン200とみなし、原価を98円とします。210の場合は購入数パターン300とみなし、原価を90円とします。300を超過する場合も購入数パターン300とみなし、原価を90円とします。DBはpostgres 8.4を使用しています。
- 購入数パターン別に部品の理想原価を抽出するためには、SQLを使用することができます。具体的な例として、部品Aの購入数が100未満の場合は購入数パターン100とみなし、原価を100円とします。200の場合は購入数パターン200とみなし、原価を98円とします。210の場合は購入数パターン300とみなし、原価を90円とします。300を超過する場合も購入数パターン300とみなし、原価を90円とします。このような条件を設定することで、部品の理想原価を抽出することができます。
- 部品の購入数パターン毎の理想原価を抽出するためには、SQLを使用することができます。具体的には、部品Aの購入数が100未満の場合は購入数パターン100とみなし、原価を100円とします。200の場合は購入数パターン200とみなし、原価を98円とします。210の場合は購入数パターン300とみなし、原価を90円とします。300を超過する場合も購入数パターン300とみなし、原価を90円とします。このような条件をSQLで実現することで、部品の理想原価を抽出することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>理想原価を抽出したい は、部品と予定購入数みたいな数値を渡すと上記テーブルから記載の条件で原価を取得する、 という意味で合ってますか? とりあえず、そう考えて書いてみました。 select 部品,原価 from ( select t.* --部品ごとに購入数で並べた時、前レコード前が存在するときはその購入数・存在しない時は0 ,lag(購入数,1,0) over(partition by 部品 order by 購入数) + 1 下範囲 --部品ごとに購入数で並べた時、後レコードが存在するときは0・存在しない時は99999999 ,lead(0,1,99999999/* ※1 */) over(partition by 部品 order by 購入数) 上範囲 from t) where 部品 = 'A'/* ※2 */ and (310 /* ※3 */ between 下範囲 and 購入数 or 310 /* ※3 */ between 購入数 + 1 and 上範囲) ; ※1にはこれ以上の購入数はありえない、という値を設定してください ※2・※3は検索条件にあたる部品・購入数を設定してください。 ただ、PostgreSQLの環境がないのでOracle10gで試したものですので上手くいかないかもしれません。 PostgreSQL8.4から分析関数が利用できるようなので大丈夫かなと思いますが・・ http://www.postgresql.jp/document/8.4/html/functions-window.html
お礼
>>理想原価を抽出したい >は、部品と予定購入数みたいな数値を渡すと上記テーブルから記載の条件で原価を取得する、 >という意味で合ってますか? 仰せの通り、その認識で間違いありません。 ご教授頂いたSQLで検証した結果、思惑通りの抽出結果となりました。 本当に助かりました、ありがとうございます。