Используя условное агрегирование для создания групп записей, я придумал это решение.
Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните этот шаг в ваших будущих вопросах)
DECLARE @T AS TABLE
(
RefNo char(1),
Whatever varchar(10),
Seq int,
[Value] int
)
INSERT INTO @T (RefNo, Whatever, Seq, [Value]) VALUES
('A', 'Bla bla…', 1, 1),
('A', 'Bla bla…', 2, 1),
('A', 'Bla bla…', 3, 0),
('A', 'Bla bla…', 4, 1),
('B', 'Bla bla…', 5, 0),
('B', 'Bla bla…', 6, 1),
('B', 'Bla bla…', 7, 0),
('B', 'Bla bla…', 8, 1),
('B', 'Bla bla…', 9, 0);
Затем общее табличное выражение для создания групп:
WITH CTE AS
(
SELECT RefNo,
Whatever,
Seq,
[Value],
SUM(IIF([Value] = 0, 1, 0)) OVER(ORDER BY Seq) As Grp
FROM @T
)
Запрос:
SELECT RefNo,
Whatever,
[Value],
(
SELECT COUNT(*)
FROM CTE AS T1
WHERE T1.Grp = T0.Grp -1
AND T1.[Value] <> 0
AND T1.RefNo = T0.RefNo
) As [Count]
FROM CTE As T0
WHERE [Value] = 0
Результаты:
RefNo Whatever Value Count
A Bla bla… 0 2
B Bla bla… 0 0
B Bla bla… 0 1
B Bla bla… 0 1