Это проблема пробелов и островков .Используя следующий запрос T-SQL:
SELECT ShiftID, Name_ID, [From], [To], Length, Size, Chargeable,
ROW_NUMBER() OVER (PARTITION BY ShiftID, Name_ID, Size
ORDER BY [From]) -
ROW_NUMBER() OVER (PARTITION BY ShiftID, Name_ID, Size, Chargeable
ORDER BY [From]) AS grp
FROM Table1
производит следующий вывод:
ShiftID Name_ID From To Length Size Chargeable grp
---------------------------------------------------------------
DAY1 CLASSIC_1 3 5 3 NQ2 No 1
DAY1 CLASSIC_1 6 8 2 NQ2 No 1
DAY1 CLASSIC_1 0 2 3 NQ2 Yes 0
DAY1 CLASSIC_1 8 11 3 NQ2 Yes 2
DAY1 CLASSIC_1 11 14 3 NQ2 Yes 2
Теперь вы можете использовать grp
для консолидации записей:
SELECT ShiftID, Name_ID, Size,
MIN([From]) AS [From], MAX([To]) AS [To], SUM(Length) AS Length,
Chargeable
FROM (
SELECT ShiftID, Name_ID, [From], [To], Length, Size, Chargeable,
ROW_NUMBER() OVER (PARTITION BY ShiftID, Name_ID, Size
ORDER BY [From]) -
ROW_NUMBER() OVER (PARTITION BY ShiftID, Name_ID, Size, Chargeable
ORDER BY [From]) AS grp
FROM Table1) AS t
GROUP BY ShiftID, Name_ID, Size, Chargeable, grp
Демо здесь