--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (num1 int,num2 int,date datetime)
insert into #T
select 100,300,'2008-4-2' union all
select 200,500,'2008-4-3' union all
select 300,800,'2008-4-4'select
num1=(select sum(num1) from #T where date<=t.date),
num2=(select sum(num2) from #T where date<=t.date),
date
from #T as t/*
num1 num2 date
----------- ----------- -----------------------
100 300 2008-04-02 00:00:00.000
300 800 2008-04-03 00:00:00.000
600 1600 2008-04-04 00:00:00.000
*/
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (num1 int,num2 int,date datetime)
insert into #T
select 100,300,'2008-4-2' union all
select 200,500,'2008-4-3' union all
select 300,800,'2008-4-4'select
num1=(select sum(num1) from #T where date<=t.date),
num2=(select sum(num2) from #T where date<=t.date),
date
from #T as t/*
num1 num2 date
----------- ----------- -----------------------
100 300 2008-04-02 00:00:00.000
300 800 2008-04-03 00:00:00.000
600 1600 2008-04-04 00:00:00.000
*/
if object_id('tempdb.dbo.#T1') is not null drop table #T1
create table #T1 (num1 int,num2 int,date datetime)
insert into #T1
select 100,300,'2008-4-2' union all
select 200,500,'2008-4-3' union all
select 300,800,'2008-4-4'
go
select
num1=(select sum(num1) from #T1 where date<=t.date),
num2=(select sum(num2) from #T1 where date<=t.date),
date
from #T1 as t
go
drop table #T1/*
num1 num2 date
----------- ----------- -----------------------
100 300 2008-04-02 00:00:00.000
300 800 2008-04-03 00:00:00.000
600 1600 2008-04-04 00:00:00.000(3 row(s) affected)
*/
insert #tb select 100,300,'2008-4-2'
insert #tb select 200,500,'2008-4-3'
insert #tb select 300,800,'2008-4-4'update t
set num1=(select sum(num1) from #tb where date<=t.date),
num2=(select sum(num2) from #tb where date<=t.date)
from #tb t select * from #tbnum1 num2 date
100 300 2008-04-02 00:00:00.000
300 800 2008-04-03 00:00:00.000
600 1600 2008-04-04 00:00:00.000
insert #tb select 100,300,'2008-4-2'
insert #tb select 200,500,'2008-4-3'
insert #tb select 300,800,'2008-4-4'declare @num1 int,@num2 int
select @num1 = 0,@num2=0
update #tb set
num1 = @num1,
num2 = @num2,
@num1= @num1+num1,
@num2= @num2+num2select * from #tbnum1 num2 date
100 300 2008-04-02 00:00:00.000
300 800 2008-04-03 00:00:00.000
600 1600 2008-04-04 00:00:00.000
insert into #T
select 100,300,'2008-4-2' union all
select 200,500,'2008-4-3' union all
select 300,800,'2008-4-4'
select * from #tselect sum(a.num1) as num1,
sum(a.num2) as num2,
b.date
from #t as a
join #t as b
on a.date<=b.date
group by b.date
drop table #t