我知道我可以为此使用光标,但我正在尝试使用理想的基于集合的解决方案或 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)
这两种产品的期望输出是:
产品 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
我很欣赏可以提供的任何见解。我想这是以前做过的,但我的搜索没有产生任何命中。