【发布时间】:2011-05-06 16:42:38
【问题描述】:
我需要根据累积值计算百分比。应用于每行中每个值的百分比取决于从另一个表中获取的百分比。百分比计算需要以分层方式进行,因为税收可能是根据收入计算的。
例如:
工资 = 1000
600 * 10% [前 600 美元按较低税率计算]
400 * 30% [按较高税率计算的剩余金额]
所以,我一直试图让它工作,但无法解决。 DBA 不在,所以交给我了。大多数 SQL 我都可以,但我不知道如何解决这个问题,或者我应该在谷歌中搜索什么,所以很抱歉这是一个简单的搜索,请直接指向 URL,我我会自己尝试解决的!
不管怎样,下面是数据表 (#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)
【问题讨论】:
标签: sql sql-server tsql