WITH SourceRecordset AS (SELECT [index], workcode, valueFROM ( VALUES(1, 'CL', 5), (2, 'CL', 10), (3, 'CL', 10), (4, 'LI', 10), (5, 'LI', 10), (6, 'ME', 5), (7, 'ME', 5), (8, 'CL', 10), (9, 'CL', 10), (10, 'CL', 5), (11, 'ME', 10), (12, 'ME', 10) ) d([index], workcode, value)),Grouped AS (SELECT [index], workcode, value, ROW_NUMBER() OVER(ORDER BY [index])- ROW_NUMBER() OVER(PARTITION BY workcode ORDER BY [index]) AS rnDiffFROM SourceRecordset)SELECT MIN([index]) AS [index], workcode, SUM(value) AS valueFROM GroupedGROUP BY workcode,rnDiffORDER BY MIN([index]);
WITH SourceRecordset AS (SELECT [index], workcode, valueFROM ( VALUES(1, 'CL', 5), (2, 'CL', 10), (3, 'CL', 10), (4, 'LI', 10), (5, 'LI', 10), (6, 'ME', 5), (7, 'ME', 5), (8, 'CL', 10), (9, 'CL', 10), (10, 'CL', 5), (11, 'ME', 10), (12, 'ME', 10) ) d([index], workcode, value))SELECT [index]=MIN([index]), workcode=MAX(workcode), value=SUM(value)FROM ( SELECT [index], workcode, value ,rn=[index]-ROW_NUMBER() OVER (PARTITION BY workcode ORDER BY [index]) FROM SourceRecordset) aGROUP BY rnORDER BY [index]