Как разделить на группы и посчитать сумму в группах sql
Есть таблица:
Суть следующая. Таблица отсортирована по id. Нужно сгруппировать по столбцу group1 и group2, посчитать сумму в столбце razn следующим образом - группы в столбце group2 находятся между нулями. То есть в итоге должно получиться что-то вроде такой таблицы:
Ответы (1 шт):
Автор решения: Vladimir
→ Ссылка
with tab as (
select
id
,group1
,group2
case when (lead([group2]) over(Partition by group1 order by id) = 0) or (lead([group2]) over(Partition by group1 order by id) is null) then id else null end as current_id
)
Select
t1.*
,z.current_id
from tab t1
outer apply
(
Select top 1 t2.current_id
from tab t2
where t1.group1 = t2.group1 and t1.id<=t2.id and t2.current_id is not null
order by t2.id
)z
И остаётся все это безобразие сгруппировать по t1.group1 , z.current_id и посчитать сумму

