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

Comment générer une plage de nombres entre deux nombres ?

Sélectionnez les valeurs non persistantes avec le VALUES mot-clé. Ensuite, utilisez JOIN s pour générer de nombreuses combinaisons (peut être étendu pour créer des centaines de milliers de lignes et au-delà).

Version courte et rapide (pas si facile à lire) :

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

Démo

Version plus détaillée :

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

Démo

Les deux versions peuvent facilement être étendues avec un WHERE clause, limitant la sortie des nombres à une plage spécifiée par l'utilisateur. Si vous souhaitez le réutiliser, vous pouvez lui définir une fonction table.