sql >> Database >  >> RDS >> Sqlserver

Hoe genereer je een reeks getallen tussen twee getallen?

Selecteer niet-permanente waarden met de VALUES trefwoord. Gebruik dan JOIN s om heel veel combinaties te genereren (kan worden uitgebreid om honderdduizenden rijen en meer te maken).

Korte en snelle versie (niet zo gemakkelijk te lezen):

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

Uitgebreidere versie:

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 versies zijn eenvoudig uit te breiden met een WHERE clausule, waardoor de uitvoer van getallen wordt beperkt tot een door de gebruiker opgegeven bereik. Als u het opnieuw wilt gebruiken, kunt u er een functie met tabelwaarde voor definiëren.



  1. Meerdere plannen voor een identieke zoekopdracht

  2. Stel de tekenset en sortering van een kolom in MariaDB in

  3. Hoe een door komma's gescheiden tekenreeks in Oracle te splitsen

  4. SQLskills Wait Types Library toont nu SentryOne-gegevens