Prueba debajo de la consulta
DECLARE @Reservation TABLE ( BookDate DATE, ROOMS INT)
INSERT INTO @Reservation VALUES
('1-Jul-2015',30 ),
('2-Jul-2015',30 ),
('3-Jul-2015',30 ),
('5-Jul-2015',28 ),
('6-Jul-2015',28 ),
('7-Jul-2015',28 ),
('8-Jul-2015',30 ),
('9-Jul-2015',30 ),
('10-Jul-2015',26 ),
('11-Jul-2015',28 ),
('12-Jul-2015',28 )
;WITH
cte AS (
select ROW_NUMBER() OVER(ORDER BY BookDate) AS RowNumber,
[ROOMS], BookDate FROM @Reservation
),
cte2 as (
SELECT TOP 1 RowNumber, 1 as GroupNumber, [ROOMS], BookDate FROM cte ORDER BY RowNumber
UNION ALL
SELECT c1.RowNumber,
CASE WHEN c2.[ROOMS] <> c1.[ROOMS] then c2.GroupNumber + 1 ELSE c2.GroupNumber END AS GroupNumber, c1.[ROOMS], c1.BookDate
FROM cte2 c2 join cte c1 on c1.RowNumber = c2.RowNumber + 1
)
SELECT Start_Date, End_Date, Rooms
FROM
( SELECT MIN(BookDate) AS START_DATE, MAX(BookDate) AS END_DATE ,ROOMS, GroupNumber
FROM cte2
GROUP BY ROOMS ,GroupNumber
) a