Нумерация строк в зависимости от значения столбца

Есть таблица со столбцами group и flag. Нужно пронумеровать их строки для каждой группы (group), получить столбец number. Если флаг (flag) равен 1, то номер строки (number) увеличивается на 1, если флаг равен 0, то номер строки будет равен последнему номеру строки с флагом 1. Microsoft SQL Server 2017 - 14.0.3445.2 (X64)

group flag number
1 1 1
1 1 2
1 1 3
1 1 4
1 0 4
1 0 4
2 1 1
2 0 1
2 1 2
2 0 2
2 0 2
2 1 3
2 0 3
2 1 4
2 1 5

Ответы (1 шт):

Автор решения: pegoopik
SELECT *, SUM(flag)OVER(PARTITION BY [group] ORDER BY cur_time
    ROWS UNBOUNDED PRECEDING
  )[number]
FROM [Table]
  1. Убедитесь, что пара [group] + cur_time - уникальна

  2. Не забудьте добавить ROWS UNBOUNDED PRECEDING, По умолчанию используется RANGE UNBOUNDED PRECEDING, что работает медленнее, т.к. приводит к спулу окна.

→ Ссылка