Как разделить на группы и посчитать сумму в группах 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 и посчитать сумму

→ Ссылка