我需要從累計值中計算一個百分比。要應用於每行中每個值的百分比率取決於從另一個表中獲取的費率。百分比費率計算需要以分層的方式進行,因爲稅收可能按收入計算。如何根據另一個表中的組編寫一條sql語句來計算總計?
例如: 工資= 1000
600 * 10%[以較低的稅率首先$ 600計算]
400 * 30%
所以[在較高稅率的剩餘量計算出],我已經試圖讓這個工作,但不能整理出來。 DBA離開了,所以它已經交給我了。大多數SQL我可以,但我不知道如何處理這個問題,或者我應該在谷歌搜索,所以道歉是這是一個簡單的搜索,請直接指向我的網址,我會自己動手做!
無論如何,下面是數據表(#v)的格式示例和範圍表(#tiers)的示例,以及我到目前爲止的情況。我需要一個新的列,其中正確的百分比率級別的'cval'的計算正如我上面所解釋的。
希望有人能幫助或指引我正確的方向! 謝謝,J.
create table #v(
id nvarchar(50),
val money,
tid int
)
insert into #v values ('a',30,1)
insert into #v values ('b',50,1)
insert into #v values ('c',10,1)
insert into #v values ('d',30,1)
insert into #v values ('e',-80,1)
create table #tiers (
tid int,
threshold money,
amount money
)
insert into #tiers values (1,0,30)
insert into #tiers values (1,40,40)
insert into #tiers values (1,100,50)
select * from
(
select v1.id, v1.tid, v1.val,sum(v2.val) cval
from #v v1
inner join #v v2 on v1.id >= v2.id
group by v1.id, v1.val, v1.tid
) a
left join
(
select a.tid, a.id, a.threshold [lower], b.threshold [upper] from
(
select rank() over (order by threshold) as id, tid, threshold, amount from #tiers
) a
left join
(
select rank() over (order by threshold) as id, tid, threshold, amount from #tiers
) b on a.id = b.id-1
) b on (a.cval >= lower and a.cval < upper) or (a.cval >= lower and upper is null)
標記爲正確,因爲我用它來編輯我的原始帖子,給我我想要的解決方案。 – Jason 2011-05-14 14:01:29