获取应用累积费率/百分比的计算值

时间:2015-05-12 14:58:34

标签: sql sql-server

我有一个包含价值金额的表格。我有另一个表需要对这些值进行应用,但复杂的部分是它需要累积计算。考虑我的第一张桌子有8500,这是我的费率:

AmtFrom     AmtTo       Rate
0.00        2500.00     0.1
2500.01     5000.00     0.2
5000.01     10000.00    0.3
100000.01   20000.00    0.4

我需要在这里返回三行,并在每个范围内计算费率。这将是我8500金额的预期结果:

Amount      Rate    Calculated
2500.00     0.1     250.00
2500.00     0.2     500.00
3500.00     0.3     1050.00

正如您所看到的,Amount列总和将为8500,但速率将分别应用于每个范围。

我最好的猜测是处理这种情况会是某种递归CTE,我之前通过父/子关系实现了递归搜索,但我完全不知道如何在这里做,或者如果那是最好的解决方案......

1 个答案:

答案 0 :(得分:2)

您不需要递归CTE,只需要一些算术逻辑:

select (case when t.amount >= r.AmountTo then r.AmountTo - r.AmountFrom
             else t.amount - r.AmountFrom
        end) as Amount,
       r.rate,
       (case when t.amount >= r.AmountTo then r.AmountTo - r.AmountFrom
             else t.amount - r.AmountFrom
        end) * r.rate as Calculated
from (select 8500 as amount) t join
     rates r
     on r.AmountFrom <= t.amount;

对于rates.AmountFrom列的0.01偏移量,您的解释有点模糊。我怀疑你会想要添加then语句的case个句子。