Wie erstelle ich eine inkrementelle Zahl in einer Oracle SQL-Abfrage, ohne eine Tabelle zu erstellen? Ich habe versucht, die "with" -Klausel zu verwenden, aber ich konnte das erwartete Ergebnis nicht erzielen. Ich benutze Orakel 10g
Hier ist der Code, den ich versuche, es scheint nicht zu funktionieren:
WITH
TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1
union all
select t3.YEARS+1 from TABLE3 t3
WHERE 1=1 AND t3.YEARS < 2011
)
select YEARS from TABLE3
Das erwartete Ergebnis ist:
2008
2009
2010
2011
oracle-10g
50LV3R
quelle
quelle
Ich denke, dies wird funktionieren (basierend auf dieser Seite ( http://psoug.org/definition/LEVEL.htm ) als Ausgangspunkt):
Dies sollte zurückgeben:
Passen Sie 2008 und 4 an, um unterschiedliche Ergebnisse zu erhalten.
quelle
Offenbar hat das OP versucht, das Problem mithilfe einer rekursiven Unterabfrage zu lösen. Dies wird in 10g nicht funktionieren, da diese Funktionalität erst in 11.2 hinzugefügt wurde, aber in 11.2+ wäre das Folgende auch eine gültige Lösung für das Problem.
Das einzige, was in der OP-Abfrage fehlte, war
(YEARS)
.quelle
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
ist eine Orakel-spezifische Tabelle. Andere Datenbanken wie MS SQL Server, MySQL, Postgres erlauben Anweisungen wieselect expression
. Mysql kennt die eine duale Tabelle auchWarum nicht einfach eine Sequenz erstellen?
BEARBEITEN:
Für kleine Bereiche von Sequenzwerten können Sie Folgendes verwenden:
Sie brauchen nur eine Tabelle mit einer ausreichenden Anzahl von Zeilen.
quelle
Hier ist ein Beispiel für das Hinzufügen mehrerer Flags und das Inkrementieren dieser anhand der case-Anweisung.
- Die Ergebnismenge ist unten
quelle
Erhöhen Sie nur in einem mit dem Rownum Wählen Sie Rownum + 100 aus "Tabelle" Reihenfolge um 1;
Das Ergebnis mit 101, 102 usw.
quelle