SQL - Zahlenfolge erzeugen

Wie wird eine Folge von Zahlenwerten in SQL erzeugt?

Erzeugen einer Zahlenfolge

Eine Zahlenfolge wird immer mal wieder benötigt. Ein Beispiel ist ein Datensatz mit einem Index. Wenn für einen bestimmten Index kein Eintrag vorhanden ist,  wird der Index gar nicht zurückgegeben. Wenn der Datensatz mit einer Zahlenfolge verknüpft wird, werden auch die Indizes ohne Einträge aufgelistet.

Keine Schleifen

In SQL sind Schleifen mit einzelnen SQL-Statements zwar erlaubt aber "teuer"

Kartesisches Produkt

Das Kartesische Produkt zweier Mengen ist die Menge aller Paare, die aus je einem Element der einen und der anderen Menge gebildet werden können. So sind die Zahlen 0 bis 99 das Kartesische Produkt aus den Mengen der Zahlen (0...9) und (0...90). Der Vektor mit den Zehnern entsteht aus dem Vektor der Einer durch Multiplikation mit 10.

Beispiel-Code

 

 

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.

Kommentare und Antworten

×

Name ist erforderlich!

Geben Sie einen gültigen Namen ein

Gültige E-Mail ist erforderlich!

Gib eine gültige E-Mail Adresse ein

Kommentar ist erforderlich!

Sei der erste der kommentiert
Top