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

Откуда: Москва
Сообщений: 163
Краем уха слышала, что в SQL2012 расширили перечень аналитических оконных функций, может чего путаю но мне казалось что среди них была функция накопительного итога, что то я ее не могу найти.

time var total_sum
1 15 15
2 10 25
4 13 38
7 11 49


P.S. Варианты альтернативных способов решения задачи не предлагать.))
19 июн 13, 15:56    [14454967]     Ответить | Цитировать Сообщить модератору
 Re: Аналитическая функция накопительной суммы в SQL2012  [new]
Wisky
Member

Откуда: Москва
Сообщений: 163
сорри нашла http://ole.michelsen.dk/blog/calculate-a-running-total-in-sql-server-2012/
19 июн 13, 15:59    [14454994]     Ответить | Цитировать Сообщить модератору
 Re: Аналитическая функция накопительной суммы в SQL2012  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
а действительно забавно))
declare @tableX table (id int identity, n int, total int default 0)
insert @tableX (n) values(10),(20),(30),(40)

-- select * from @tableX

declare @Value int=0
/*
select t.id, t.n, t.n+@Value, @Value=@Value+t.n 
from @tableX t
-- A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
*/
update t
set t.total=@Value,@Value=@Value+t.n
from @tableX t

select * from @tableX
idntotal
11010
22030
33060
440100
19 июн 13, 19:11    [14456058]     Ответить | Цитировать Сообщить модератору
 Re: Аналитическая функция накопительной суммы в SQL2012  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Cygapb-007,

Ага, только порядок операций при update не документирован, и в один прекрасный момент код может начать глючить на ровном месте.
19 июн 13, 19:14    [14456068]     Ответить | Цитировать Сообщить модератору
 Re: Аналитическая функция накопительной суммы в SQL2012  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Кот Матроскин
Ага, только порядок операций при update не документирован, и в один прекрасный момент код может начать глючить на ровном месте.
Это-то понятно... Но все равно - забавно)
declare @tableX table (id int identity, g int, n int, total int default 0)
insert @tableX (g,n) values(1,5),(1,10),(1,15),(2,20),(2,20),(3,20),(3,30),(3,40)

declare @Value int=0, @Group int=0

update t set 
   @Value=t.n+case when @Group=t.g then @Value else 0 end, 
   @Group=t.g,
   t.total=@Value
from @tableX t

select * from @tableX
idgntotal
1155
211015
311530
422020
522040
632020
733050
834090
19 июн 13, 20:09    [14456162]     Ответить | Цитировать Сообщить модератору
 Re: Аналитическая функция накопительной суммы в SQL2012  [new]
укпзцщкшопузцкп
Guest
Кот Матроскин,
+1

Cygapb-007,
+1

только можно добавить к запросу WITH(INDEX(1), TABLOCKX) OPTION (MAXDOP 1); это вроде 200 грам перед боем.
20 июн 13, 00:31    [14457051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить