2011-03-14 11 views
9

Tengo una tabla que tiene filas con los números de inicio y final de un rango, p.Crear tabla de temperatura con rango de números

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

y así sucesivamente ..

Me gustaría crear una tabla temporal (o variable de tabla/cte etc) que tiene una fila para cada uno de estos números y el rango que cubren entre ellos - es decir, Teniendo en cuenta el ejemplo anterior me gustaría ver una tabla con las siguientes filas:

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

¿Puede alguien me punto en la dirección de manera rápida y fácil para lograr esto? Pensé en usar una tabla de números de alguna manera, pero las tablas que estoy viendo tienen> 200m filas y ¡no tengo una tabla de números tan grande!

Cualquier ayuda es muy apreciada. Gracias por adelantado.

Respuesta

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

¡Increíble! ¡Gracias! – LNote

+0

@LNote: bienvenido. Por favor, marque la respuesta como aceptada si es lo que quería. – Quassnoi

+0

Sí, lo hice, pero usted fue demasiado rápido y tuve que esperar 3 minutos antes de que me permitieran hacerlo. Gracias de nuevo. – LNote

4

En MSSQL, también se puede utilizar selecto de cualquier mesa grande arbitraria, syscolumns serían un ejemplo. Si no hay suficientes filas, puede hacer una combinación cruzada:

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