Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Unione di dati in una singola tabella SQL senza un cursore

L'osservazione chiave è che una sequenza di numeri meno un'altra sequenza è una costante. Possiamo generare un'altra sequenza usando row_number . Questo identifica tutti i gruppi:

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

Il resto è solo aggregazione.