2015-05-12 112 views
1

我有一個包含值金額的表。我有另一張表,需要對這些數值應用一個匯率,但複雜的部分是需要累計計算。想想我的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 

正如你所看到的,金額列總和將是8500,但稅率適用於每個單獨的範圍。

我最好的猜測是處理這個問題,這是一種遞歸CTE,我之前通過父/子關係實現了遞歸搜索,但我完全喪失瞭如何去做在這裏,或者如果這是即使是最好的解決辦法...

回答

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; 

你的解釋有點含糊其辭怎麼辦0.01偏移量爲rates.AmountFrom列。我懷疑你會想添加條款的case聲明。

+0

偏移量無關緊要。我只是爲了便於閱讀而使用了圓潤的金額。謝謝你的回答;我想這就是當一個簡單的解決方案將我凝視在臉上時,嚴重過度思考問題的案例之一。 – stringpoet