これにカーソルを使用できることはわかっていますが、理想的にはセットベースのソリューションまたはおそらくCTEでこれを記述しようとしています。私は2つのテーブル(投稿用に簡略化)、製品を持っています-それぞれに基本価格があり、次にその価格に連続して適用されるパーセンテージの増加であるモディファイアのテーブルがあります。したがって、製品に 2 つのパーセンテージ、つまり 4% と 5% がある場合、基本価格を 9% だけ引き上げることはできません。基本価格を 4% 引き上げる必要があり、その結果は 5% 増加します。 . これは 1 回から複数回発生する可能性があります。これが私がこれまでに持っているものです:
CREATE TABLE #Product
(ProdID INT,
BasePrice MONEY)
INSERT INTO #Product
VALUES
(1, 10), (2, 20)
CREATE TABLE #Modifiers
(ProdID INT,
ModPercent INT)
INSERT INTO #Modifiers
VALUES
(1, 2), (1,5), (2, 2), (2, 3), (2,5)
これら 2 つの製品の望ましい出力は次のとおりです。
製品 1 ((10 * 1.02) * 1.05) = 10.71 製品 2 (((20 * 1.02) * 1.03) * 1.05) = 22.0626
ストレートクエリで EXP(SUM(LOG())) をいじってみましたが、常にパーセンテージを合計しているようです。私もCTEを試しましたが、無限に再帰することはできません:
WITH ProductOutput (ProdID, SumPrice) AS
(
SELECT ProdID, BasePrice
FROM #Product
UNION ALL
SELECT P.ProdID, CAST(O.SumPrice * (1 + (M.ModPercent / 100.00)) AS MONEY)
FROM #Product P
INNER JOIN #Modifiers M ON
P.ProdID = M.ProdID
INNER JOIN ProductOutput AS O
ON P.ProdID = O.ProdID
)
SELECT ProdID, SUM(SumPrice)
FROM ProductOutput
GROUP BY ProdID
提供できる洞察に感謝します。これは以前にも行われたと思いますが、私の検索ではヒットしませんでした。