标价=100
团体 | 折扣 |
---|---|
1 | 20 |
1 | 30 |
2 | 10 |
2 | 10 |
3 | 25 |
折扣应适用于之前的团体净价。第一组折扣将适用于标价。 例如 第 1 组净价应为 100 - (100 的 20%) - (100 的 30%) = 100-20-30 = 50
第 1 组净价 = 50
第 2 组折扣将适用于第 1 组净价。 第 2 组净价 = 50 - (50 的 10%) - (50 的 10%) = 50-5-5 = 40
第 2 组净价 = 40
第 3 组净价 = 40 -(40 的 25%)= 40-10 =30
30是最终价格。
我能够使用 while 循环来做到这一点。 可以使用单个查询来完成吗?
您可以通过预先汇总折扣然后使用一些数学技巧来做到这一点:
SELECT 100.0 * EXP(SUM(LOG((1 - discount / 100.0))))
FROM (
SELECT [group], SUM(discount) AS discount
FROM (
VALUES (1, 20)
, (1, 30)
, (2, 10)
, (2, 10)
, (3, 25)
) t ([Group],discount)
GROUP BY [group]
) x
这基本上生成 100 * (1 - 0.5) * (1 - 0.2) * (1 - 0.25) 但没有递归的东西。