Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zusammenführen von Daten in einer einzelnen SQL-Tabelle ohne Cursor

Die wichtigste Beobachtung ist, dass eine Folge von Zahlen minus einer anderen Folge eine Konstante ist. Wir können eine andere Sequenz mit row_number generieren . Dies identifiziert alle Gruppen:

select id, MIN(number) as low, MAX(number) as high
from (select t.*,
             (number - ROW_NUMBER() over (partition by id order by number) ) as groupnum
      from t
     ) t
group by id, groupnum

Der Rest ist nur Aggregation.