日期:2014-05-19  浏览次数:20580 次

简单相加问题100分,最好一句update搞定
--#t和#t1   id相同时#t的valF加上#t1的addnum下一条数据的varT等于前一条的valF
--当#t1里面addnum变化时代码也要可用
create   table   #t   (id   int   ,valF   int,varT   int)
insert   #t
select   1,0,50   union  
select   2,0,0   union  
select   3,0,0   union  
select   4,0,0   union  
select   5,0,0  
create   table   #t1(id   int,addnum   int)  
insert   #t1
select   1,10   union
select   2,12   union  
select   3,13   union  
select   4,17   union  
select   5,30
select   *   from   #t
select   *   from   #t1
  --要求结果
1,60,50
2,72,60
3,85,72
4,102,85
5,132,102

------解决方案--------------------
create table #t (id int ,valF int,varT int)
insert #t
select 1,0,50 union
select 2,0,0 union
select 3,0,0 union
select 4,0,0 union
select 5,0,0
create table #t1(id int,addnum int)
insert #t1
select 1,10 union
select 2,12 union
select 3,13 union
select 4,17 union
select 5,30
go

select
a.id,
valF=sum(b.varT)+sum(c.addnum),
valT=sum(b.varT)+sum(case when c.id <a.id then c.addnum else 0 end)
from
#t a,#t b,#t1 c
where
a.id> =b.id and b.id=c.id
group by
a.id
go


/*
id valF valT
----------- ----------- -----------
1 60 50
2 72 60
3 85 72
4 102 85
5 132 102
*/

drop table #t,#t1
go
------解决方案--------------------
--更新的语句

create table #t (id int ,valF int,varT int)
insert #t
select 1,0,50 union
select 2,0,0 union
select 3,0,0 union
select 4,0,0 union
select 5,0,0
create table #t1(id int,addnum int)
insert #t1
select 1,10 union
select 2,12 union
select 3,13 union
select 4,17 union
select 5,30
go

update a
set
valF=(select sum(b.varT+c.addnum) from #t b,#t1 c where b.id=c.id and b.id <=a.id),
varT=(select sum(b.varT+c.addnum) from #t b,#t1 c where b.id=c.id and b.id <=a.id)-d.addnum
from
#t a,#t1 d
where
a.id=d.id
go

select * from #t
/*
id valF varT
----------- ----------- -----------
1 60 50
2 72 60
3 85 72
4 102 85
5 132 102
*/

drop table #t,#t1
go