Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fusionner des données dans une seule table SQL sans curseur

L'observation clé est qu'une séquence de nombres moins une autre séquence est une constante. Nous pouvons générer une autre séquence en utilisant row_number . Ceci identifie tous les groupes :

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

Le reste n'est que de l'agrégation.