comment créer un nombre incrémentiel dans une requête SQL Oracle sans créer de table? J'ai essayé d'utiliser la clause "avec", mais je n'ai pas réussi à obtenir le résultat attendu. J'utilise Oracle 10g
voici le code que j'essaye, il ne semble pas fonctionner:
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
le résultat attendu que je veux est:
2008
2009
2010
2011
oracle-10g
50LV3R
la source
la source
Je pense que cela fonctionnera (basé sur cette page ( http://psoug.org/definition/LEVEL.htm ) comme point de départ):
Cela devrait retourner:
Ajustez 2008 et 4 pour obtenir des résultats différents.
la source
Il semble que l'OP tentait de résoudre le problème à l'aide d'une sous-requête récursive. Cela ne fonctionnera pas dans 10g car cette fonctionnalité n'a pas été ajoutée avant 11.2, mais dans 11.2+, ce qui suit serait également une solution valide au problème.
La seule chose qui manquait à la requête du PO était
(YEARS)
.la source
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
est une table spécifique à Oracle. D'autres bases de données comme MS SQL Sever, mysql, postgres autorisent des instructions commeselect expression
. mysql connaît aussi la double tablePourquoi ne pas simplement créer une séquence?
ÉDITER:
Pour de petites plages de valeurs de séquence, vous pouvez utiliser quelque chose comme ceci:
Vous avez juste besoin d'une table avec un nombre suffisant de lignes.
la source
Voici un exemple d'ajout de plusieurs indicateurs et d'incrémentation en fonction de l'instruction case.
- L'ensemble de résultats est ci-dessous
la source
Augmentez seulement en un avec le rownum sélectionnez rownum + 100 dans l'ordre "table" de 1;
Ce résultat avec 101, 102 etc.
la source