Group chunck of rows

Group chunck of rows.

Last updated:

Warning: Review and test in a non-production environment before running.

Back to results

create table a(id int identity(1,1), val int);

insert into a values (0),(0),(0),(1),(0),(0),(0),(0),(3),(0),(0),(7),(0),(0),(0);

select * from a;

WITH Delims AS (
     SELECT
       id,
       val as DelimRowID
     FROM a
     WHERE val <> 0
),
 Data AS (
     SELECT
         t.*,d.DelimRowID,
         ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY d.DelimRowID) AS RowNo
     FROM a t LEFT JOIN Delims d 
       ON t.id <= d.ID
 )
 SELECT
     id,
     DelimRowID AS groupid,
     val
 FROM Data
 WHERE RowNo = 1;