Som nämnts i kommentarerna är detta ett klassiskt problem med luckor och öar.
En lösning som populariserats av Itzik Ben Gan är att använda det faktum att ROW_NUMBER() OVER (ORDER BY number) - number
förblir konstant inom en "ö" och kan inte visas på flera öar.
WITH T
AS (SELECT ROW_NUMBER() OVER (ORDER BY number) - number AS Grp,
number
FROM mytable
WHERE status = 0)
SELECT MIN(number) AS [From],
MAX(number) AS [To]
FROM T
GROUP BY Grp
ORDER BY MIN(number)
OBS:Om number
är inte garanterat unik ersätt ROW_NUMBER
med DENSE_RANK
i koden ovan.