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.
Soyez le premier à commenter