寻找有效折扣

问题描述 投票:0回答:1

标价=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 循环来做到这一点。 可以使用单个查询来完成吗?

sql sql-server sql-server-2014
1个回答
0
投票

您可以通过预先汇总折扣然后使用一些数学技巧来做到这一点:

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) 但没有递归的东西。

© www.soinside.com 2019 - 2024. All rights reserved.