日期:2014-05-17  浏览次数:20453 次

循环相减
create table test1(code bigint not null,enddate datetime not null,value numeric(10,4))
insert into test1(code,enddate,value)values('1001','2008-10-1',5200)
insert into test1(code,enddate,value)values('1001','2008-10-18',6200)
insert into test1(code,enddate,value)values('1001','2008-11-1',5200)
insert into test1(code,enddate,value)values('1002','2008-10-18',6200)
select a.code,a.enddate,a.value, b.value-isnull(a.value,0) as cc
from (select ROW=ROW_NUMBER()over(partition by code order by value desc),* from test1)a
left join (select  ROW=ROW_NUMBER()over(partition by code order by value desc)+1,* from test1 ) b
on a.code=b.code and a.ROW=b.ROW
1001 2008-10-18 00:00:00.000 6200.0000 NULL
1001 2008-11-01 00:00:00.000 5200.0000 1000.0000
1001 2008-10-01 00:00:00.000 5200.0000 0.0000
1002 2008-10-18 00:00:00.000 6200.0000 NULL
我想得到这样的结果
1001 2008-10-18 00:00:00.000 6200.0000 6200
1001 2008-11-01 00:00:00.000 5200.0000 1000.0000
1001 2008-10-01 00:00:00.000 5200.0000 0.0000
1002 2008-10-18 00:00:00.000 6200.0000 6200

------解决方案--------------------
abs(isnull(a.value)-isnull(b.value))