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

Откуда: Прага
Сообщений: 776
Есть таблица
+

CREATE TABLE TX
(
Row_id int IDENTITY(1,1),
mon int,
amt float)

go

insert into TX(mon,amt)
select 200501,12.2
union all
select 200501,0.5
union all
select 200502,1.4
union all
select 200503,1.2
union all
select 200607,1.2
union all
select 200503,13.5
go

Есть запрос вида

with v as (select distinct MON from TX) 
select v.MON, sum(t.amt)
from  v
inner join TX t on v.mon>=t.mon
group by v.mon
order by v.mon 


Как это сделать с помощью оконной функцииБ
22 июл 16, 15:23    [19442079]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Шыфл
Как это сделать с помощью оконной функцииБ

.... а зачем тут вообще ето ,смысл почсчитать сумму по месяцам ?
22 июл 16, 15:28    [19442119]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx,

Пардон сие нарастающий итог.....вбиваете ето словосочетаний в посик по форуму и в первой же теме получите sum(..) over(.....) если версия позволяет
22 июл 16, 15:34    [19442159]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл,

автор
SELECT
v.Mon,
SUM(amt) OVER (PARTITION BY 1/0 ORDER BY mon DESC ROWS BETWEEN CURRENT ROW AND unbounded FOLLOWING)
FROM TX v
ORDER BY mon

ну и сложить
22 июл 16, 15:36    [19442184]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
TaPaK,

что-то не хочет так понимать.

автор
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64) Mar 19 2015 12:32:14 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
22 июл 16, 15:41    [19442229]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
автор
Microsoft SQL Server 2008 R2 (SP3)

ну так с етого нужно начинать....
22 июл 16, 15:42    [19442242]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл
TaPaK,

что-то не хочет так понимать.

автор
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64) Mar 19 2015 12:32:14 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

уходи :)
22 июл 16, 15:43    [19442256]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
west74
Member

Откуда: Челябинск
Сообщений: 76
не факт что будет быстрей ,
но как вариант
помесь оконных функции и рекурсии :


declare @tx table
(
nMonth int,
aVal numeric(10,2)

)

insert into @tx (nMonth,aVal)
select 200501,12.2
union all
select 200501,0.5
union all
select 200502,1.4
union all
select 200503,1.2
union all
select 200607,1.2
union all
select 200503,13.5;

with
S as (select nMonth,SUM(aVal) summa ,row_number() Over(order by nMonth ) nn from @tx group by nMonth),
D as
(
select nMonth,summa,nn from S where nn=1
union all
select S.nMonth,S.summa+D.summa summa,S.nn from S
join D on S.nn=D.nn+1
)
select nMonth,summa
from D
order by nMonth
25 июл 16, 14:13    [19451358]     Ответить | Цитировать Сообщить модератору
 Re: Оконная функция.  [new]
o-o
Guest
да уж.
любителей рекурсии надо заставить дождаться выполнения их кода
хотя бы на миллионной табличке.
а лучше 10 млн
25 июл 16, 14:52    [19451719]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить