Это сделает это.Я настроил данные в табличной переменной для демонстрации.
declare @t table(RowID int, C1 int, C2 int)
insert @t values (1, 3, 2)
,(2, 5, 2)
,(3, 2, 9)
,(4, 5, NULL)
,(5, 8, NULL)
,(6, 9, 3)
,(7, 1, NULL)
select RowID, sum(C1), max(C2)
from (
select RowID, C1, C2 from @t
union all
select T1.RowID, T2.C1, null
from @t t1
join @t t2 on t2.RowID>t1.RowID and t2.C2 is null
and not exists(
select * from @t t3
where t3.RowID>t1.RowID and t3.c2 is not null and t3.RowID<t2.RowID
)
where T1.C2 is not null
) q group by RowID
Результат:
RowID C1 C2
1 3 2
2 5 2
3 15 9
4 5 NULL
5 8 NULL
6 10 3
7 1 NULL