Возможно, это поможет
Единственный трюк здесь Flg
, который будет указывать новую групповую последовательность (значения будут 1 или 0).Тогда это просто вопрос sum(Flg)
через оконную функцию.
Правка - Обновлен метод Flg
Пример
Declare @YourTable Table ([Seq] int,[Group] int,[GroupSequence] varchar(50))
Insert Into @YourTable Values
(1,0,null)
,(2,4,'A')
,(3,4,'B')
,(4,4,'C')
,(5,0,null)
,(6,6,'A')
,(7,6,'B')
,(8,0,null)
Select Line = Row_Number() over (Order by Seq)
,NewSeq = Sum(Flg) over (Order By Seq)
,GroupSequence
From (
Select *
,Flg = case when [Group] = lag([Group],1) over (Order by Seq) then 0 else 1 end
From @YourTable
) A
Order By Line
Возвращает
Line NewSeq GroupSequence
1 1 NULL
2 2 A
3 2 B
4 2 C
5 3 NULL
6 4 A
7 4 B
8 5 NULL