Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie erzeuge ich einen Zahlenbereich zwischen zwei Zahlen?

Wählen Sie nicht persistente Werte mit VALUES aus Stichwort. Verwenden Sie dann JOIN s zum Generieren von vielen, vielen Kombinationen (kann erweitert werden, um Hunderttausende von Zeilen und mehr zu erstellen).

Kurze und schnelle Version (nicht so einfach zu lesen):

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

Demo

Ausführlichere Version:

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

Demo

Beide Versionen können einfach mit einem WHERE erweitert werden -Klausel, die die Ausgabe von Zahlen auf einen benutzerdefinierten Bereich beschränkt. Wenn Sie es wiederverwenden möchten, können Sie eine Tabellenwertfunktion dafür definieren.