2011-03-14 17 views
9

Ho una tabella con righe con i numeri di inizio e fine di un intervallo, ad es.Crea tabella temporanea con intervallo di numeri

key  startID  endID 
1   500  505 
2   784  788 
3   802  804 

ecc ..

desidero creare una tabella temporanea (o variabile di tabella/CTE etc), che ha una riga per ciascuno di questi numeri e la gamma coprono tra loro - cioè dato l'esempio di cui sopra mi piacerebbe vedere una tabella con le seguenti righe:

ID 
500 
501 
502 
503 
504 
505 
784 
785 
786 
787 
788 
802 
803 
804 

qualcuno mi può puntare nella direzione del modo rapido e semplice per raggiungere questo obiettivo? Ho pensato di usare una tabella numeri in qualche modo, ma i tavoli che sto guardando hanno> 200 milioni di righe e non ho una tabella di numeri così grande!

Qualsiasi aiuto è molto apprezzato. Grazie in anticipo.

risposta

12
WITH q AS 
     (
     SELECT startId, endId 
     FROM ranges 
     UNION ALL 
     SELECT startId + 1, endId 
     FROM q 
     WHERE startId < endId 
     ) 
SELECT startId 
FROM q 
OPTION (MAXRECURSION 0) 
+0

Incredibile! Grazie! – LNote

+0

@LNote: benvenuto. Si prega di verificare la risposta come accettata se è quello che volevi. – Quassnoi

+0

Sì, l'ho fatto ma eri troppo veloce e ho dovuto aspettare 3 minuti prima che mi fosse permesso! Grazie ancora. – LNote

4

In MSSQL, è possibile utilizzare anche selezionare da qualsiasi tabella grande arbitraria, syscolumns sarebbe un esempio. Se non ci sono abbastanza righe, puoi effettuare un cross join:

SELECT  TOP 10000 
ROW_NUMBER() OVER (ORDER BY c1.id) 
FROM   syscolumns AS c1 
CROSS JOIN syscolumns AS c2 
Problemi correlati