sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo generar un rango de números entre dos números?

Seleccione valores no persistentes con VALUES palabra clave. Luego usa JOIN s para generar montones, montones de combinaciones (se puede ampliar para crear cientos de miles de filas y más).

Versión corta y rápida (no tan fácil de leer):

WITH x AS (SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n))
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM x ones, x tens, x hundreds, x thousands
ORDER BY 1

Demostración

Versión más detallada:

SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
ORDER BY 1

Demostración

Ambas versiones se pueden ampliar fácilmente con WHERE cláusula, limitando la salida de números a un rango especificado por el usuario. Si desea reutilizarlo, puede definir una función con valores de tabla para él.