Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 заполнить остатки одним запросом  [new]
одним_запросом
Guest
Здравствуйте.
подскажите, можно ли одним запросом заполнить остатки?

Получена времменая таблица и остаток на последнюю дату
id   date    amt_in   amt_out  amt_rest
1   10.09    0         12          56
2   09.09    20        7           0
3   08.09    0         4           0
4   07.09    0         6           0
5   06.09    13        9           0

нужно заполнить остатки в колонке amt_rest

Такой запрос, понятно, вернет хрень:)
update #t
set amt_rest = ( select
                            a.amt_rest - ISNULL(#t.amt_in,0) + ISNULL(#t.amt_out ,0)
                       from
                              #t as a
                       where
                             a.id = #t.id - 1
                     )   
where
    #t.id > 1

Или придется заводить курсор?
6 окт 09, 16:18    [7749029]     Ответить | Цитировать Сообщить модератору
 Re: заполнить остатки одним запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Нарастающий итог
?
6 окт 09, 16:20    [7749043]     Ответить | Цитировать Сообщить модератору
 Re: заполнить остатки одним запросом  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
Вроде бы так ?
insert into #t
select '20090910', 0, 12, 56 union all
select '20090909',20,  7,  0 union all
select '20090908', 0,  4,  0 union all
select '20090907', 0,  6,  0 union all
select '20090906',13,  9,  0

update #t set amt_rest=
(
  select dtRest 
  from(
    select t1.id,t1.date,ai=t1.amt_in,ao=t1.amt_out,ar=t1.amt_rest,dtRest=sum(t2.amt_rest+t2.amt_out-t2.amt_in)
    from #t t1
    left join #t t2 on t1.date<=t2.date
    group by t1.id,t1.date,t1.amt_in,t1.amt_out,t1.amt_rest
  )x
  where x.id=#t.id
)
select * from #t
result:
iddateamt_inamt_outamt_rest
12009-09-10 00:00:00.00001268
22009-09-09 00:00:00.00020755
32009-09-08 00:00:00.0000459
42009-09-07 00:00:00.0000665
52009-09-06 00:00:00.00013961
7 окт 09, 00:25    [7750892]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить