我有一个包含价值金额的表格。我有另一个表需要对这些值进行应用,但复杂的部分是它需要累积计算。考虑我的第一张桌子有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,我之前通过父/子关系实现了递归搜索,但我完全不知道如何在这里做,或者如果那是最好的解决方案......
答案 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
个句子。