私はこれを研究してきましたが、まだ有用な答えを見つけていません。私は SQL Server の中程度のハックであり、関数とストアド プロシージャでパラメーターを使用することにある程度成功していますが、これは理解できない組み合わせです。
わかりやすくするために、私のシナリオを要約すると次のようになります。次のように、Computer_Type、Model_Num、および Mix_Percent を維持する tbl_Computers があります。
Desktop ABC .75
Desktop XYZ .25
Laptop DEF .60
Laptop MNO .40
また、Computer_Type、Jul_Num、Aug_Num、Sep_Num を次のように管理する月別の予測テーブルもあります。
Desktop 100 200 150
Laptop 300 400 700
特定のモデルについて、過去 12 か月間に販売されたすべてのコンポーネントとアクセサリを検索する計画部品表の関数を作成しました。次のように動作します:
P_BOM ("ABC") は、Component と Comp_Percent の 2 つの列を持つテーブルになります。
CPU 1 (This means we sell 1 CPU with every desktop)
Hard Drive 2 (We sell 2 with every desktop)
Printer .8 (80% of the time we sell a printer)
ストアド プロシージャで実行したいのは、次のヘッダー Component、Jul_Num、Aug_Num、および Sep_Num を使用して、次のように見える単一の結合テーブルを提供することです。
CPU 400 600 850
Hard Drive 500 800 1000
次のロジックを合計して CPU 数を取得します:
デスクトップの Jul_Num x ABC の Mix_Percentage x ABC の CPU Comp_Percent
デスクトップの Jul_Num x XYZ の Mix_Percentage x XYZ の CPU Comp_Percent
ラップトップの Jul_Num x ABC の Mix_Percentage x ABC の
CPU
Comp_Percent
100 x 0.75 x 1) + (100 x 0.25 x 1) + (300 x 0.6 x 1) + (300 x 0.4 x 1)
何か案は?
ありがとう、
ロブ
編集:
これは反復的な問題ではなく、テーブルベースのソリューションである必要があるという提案に感謝します。
この最初のテーブルを作成して、次のようにしました。
ABC CPU 3 3 1
ABC Hard Drive 6 3 2
DEF CPU 2 2 1
DEF Hard Drive 2 2 1
MNO CPU 1 1 1
MNO Hard Drive 1 1 1
XYZ CPU 1 1 1
XYZ Hard Drive 2 1 2
SQLは次のとおりです。
SELECT All_Components.Model_Num, All_Components.Part_Num, SUM(All_Components.Qty) AS Total, TTO.Target_Total, SUM(All_Components.Qty)
/ TTO.Target_Total AS Comp_Percent
FROM (SELECT Test_tbl_Computers.Model_Num, Test_tbl_Orders_2.Order_Num, Test_tbl_Orders_2.Part_Num, Test_tbl_Orders_2.Qty
FROM Test_tbl_Orders AS Test_tbl_Orders_2 CROSS JOIN
Test_tbl_Computers) AS All_Components INNER JOIN
(SELECT Test_tbl_Orders.Part_Num, SUM(Test_tbl_Orders.Qty) AS Target_Total
FROM Test_tbl_Orders INNER JOIN
Test_tbl_Computers AS Test_tbl_Computers_1 ON Test_tbl_Orders.Part_Num = Test_tbl_Computers_1.Model_Num
GROUP BY Test_tbl_Orders.Part_Num) AS TTO ON All_Components.Model_Num = TTO.Part_Num
WHERE (All_Components.Order_Num IN
(SELECT Order_Num
FROM Test_tbl_Orders AS Test_tbl_Orders_1
WHERE (Part_Num = All_Components.Model_Num))) AND (All_Components.Part_Num <> All_Components.Model_Num)
次に、飼いならすことができない SQL モンスターにならないようにするために、別の関数を作成して、予測と混合パーセンテージへの内部結合を実行し、Part_Num でグループ化されたすべての数値を合計しました。
何よりも、自分の考えに集中するために質問を書き留めなければならないことに感謝しています。