Wie in den Kommentaren erwähnt, handelt es sich um ein klassisches Problem mit Lücken und Inseln.
Eine von Itzik Ben Gan populäre Lösung besteht darin, die Tatsache zu verwenden, dass ROW_NUMBER() OVER (ORDER BY number) - number
bleibt innerhalb einer "Insel" konstant und kann nicht auf mehreren Inseln erscheinen.
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)
NB:Wenn number
ist nicht garantiert eindeutig, ersetzen Sie ROW_NUMBER
mit DENSE_RANK
im Code oben.