Как можно сгруппировать числа из столбца таким образом, чтобы они были разделены на группы в зависимости от наличия нулей между ними при использовании MS SQL?
Для упорядочивания чисел в столбце по группам в зависимости от наличия нулей между ними, можно воспользоваться функцией ROW_NUMBER() в MS SQL Server. Пример запроса: ```sql WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY [your_column_name] DESC) - ROW_NUMBER() OVER (PARTITION BY CASE WHEN [your_column_name] = 0 THEN 1 ELSE 0 END ORDER BY [your_column_name] DESC) AS grp FROM [your_table_name] ) SELECT [your_column_name], grp FROM CTE ORDER BY grp, [your_column_name] DESC; ``` В данном примере мы используем два оконных функции ROW_NUMBER(): одну для присвоения номера каждой строки в общем порядке убывания значений столбца, и вторую для присвоения номера каждой строки внутри группы в зависимости от наличия нулей между значениями. После этого мы выводим значения столбца и их принадлежность к группе, учитывая порядок сначала по группе, а затем по значениям в убывающем порядке. Таким образом, числа будут упорядочены по группам в зависимости от наличия нулей между ними.
Ну если совсем влоб, то
WITH cte AS ( SELECT id, num, LAG(num) OVER (ORDER BY id) lag_num FROM test ) SELECT id, num, CASE WHEN num <> 0 THEN SUM(CASE WHEN num <> 0 AND lag_num = 0 THEN 1 ELSE 0 END) OVER (ORDER BY id) ELSE 0 END [group] FROM cte
Сработает неправильно, если самая первая запись ненулевая... ну это как-нить сам поправь. Мне лень.