Запуск итогов в 2008 году - это боль. SQL Fiddle, похоже, снова отправился в МВД, но вот упрощенный пример того, как вы можете это сделать.
DECLARE @ t1 ТАБЛИЦА (monthid INT, MTH VARCHAR (10), платных десятичной (18,2), running_paid десятичного (18,2))
insert into @t1
values (1,'JAN-13',35.00,0)
,(2, 'FEB-13',35.00,0)
,(3,'MAR-13',35.00,0)
declare @running decimal(18,2)
set @running= 0
update @t1 set running_paid = @running, @running= @running+ paid
select
*
from
@t1
Который даст вам:
ID MTH PAID RUNNING_PAID
1 JAN-13 35.00 35.00
2 FEB-13 35.00 70.00
3 MAR-13 35.00 105.00
EDIT: Как Богдан Sahlean указывает, что это очень трусливый маленький процесс. Вы также можете использовать курсор:
declare @t1 TABLE
(monthid int,
mth varchar(10),
paid decimal(18,2)
)
insert into @t1
values (1,'JAN-13',35.00)
,(2, 'FEB-13',35.00)
,(3,'MAR-13',35.00)
declare @running table
(monthid int,
mth varchar(10),
paid decimal(18,2),
running_paid decimal(18,2))
declare c cursor
for select monthid,mth,paid from @t1
open c
declare @Id int
declare @Mth varchar(10)
declare @paid decimal(18,2)
declare @Running_Total decimal(18,2)
set @Running_Total = 0
fetch next from c
into @Id,@Mth,@paid
WHILE @@FETCH_STATUS = 0
begin
fetch next from c
into @Id,@Mth,@paid
select @Running_Total = @Running_Total + @paid --Here's this version's hack for running total
insert into @running values (@Id,@Mth,@paid,@Running_Total)
end
select
*
from
@running
Все они воняют. Это намного проще в SQL 2012.
Хотя метод 'quirky update' является самым быстрым методом, он имеет множество ограничений. Вы должны опубликовать ссылки на статьи sqlservercentral.com по этому вопросу. –