SQL - Zahlenfolge erzeugen

Comment générer une séquence de nombres en SQL?

Génerer une séquence de nombres

Une séquence de nombres peut rendre service. Par exemple pour affichier un jeu de données avec un indexe. Si pour un indice, le jeu de données ne contient aucune entrée, l'indice est absent. Par une jointure du jeu avec une séquence de valeurs, même les indices sans entrée sont retournées.

Boucles interdites

En SQL des boucles avec des commandes SQL sont possibles mais "onéreuses"

Produit Cartésien

Le produit cartésien entre deux ensembles est l'ensemble des pairs qui peuvent être formées avec un élément de l'un et un élément de l'autre ensemble. Ainsi, les valeurs 0 à 99 sont le produit cartésien entre les ensembles (0...9) et (0...90). Le vecteur avec les dizaines est le vecteur des uns multiplié par 10.

Code exemple

 

 

DECLARE @p_N int = 123
DECLARE @p_N0 int = 0

WITH 
e1(n) AS (
	SELECT n FROM(
		VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9))
		AS a(n)),                                          -- 10^1
e2(n) AS (SELECT 10*e1.n+b.n  FROM e1 CROSS JOIN e1 AS b), -- 10^2
e3(n) AS (SELECT e2.n+100*c.n FROM e2 CROSS JOIN e1 AS c)  -- 10^3
SELECT e3.n+@p_N0 AS n FROM e3 WHERE e3.n < @p_N

e1(n) ist der Vektor mit den Ziffern 0 bis 9, erzeugt durch das SELECT FROM VALUES() Statement

e2(n) ist das kartesische Produkt des Vektors e1(n) mit dessen Zehnfachen

e3(n) kombiniert noch das Hunderfache von e1(n) hinzu

In der SELECT-Klausel wrid der Minimalwert der Folge als Parameter hinzuaddiert

In der WHERE-Klausel wird die Folge auf die gewünschte Länge gekappt.

Commentaires et réponses

×

Nom est requis!

Indiquez un nom valide

Adresse email valide requise!

Indiquez une adresse email valide

Commentaire est requis!

Soyez le premier à commenter
Top