¿Cómo crear un número incremental en la consulta SQL Oracle sin crear ninguna tabla? Intenté usar la cláusula "con", pero no pude obtener el resultado esperado. Estoy usando Oracle 10g
Aquí está el código que intento, parece que no funciona:
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
El resultado esperado que quiero es:
2008
2009
2010
2011
oracle-10g
50LV3R
fuente
fuente
Creo que esto funcionará (basado en esta página ( http://psoug.org/definition/LEVEL.htm ) como punto de partida):
Esto debería devolver:
Ajuste 2008 y 4 para obtener resultados diferentes.
fuente
Parece que el OP estaba intentando resolver el problema utilizando una subconsulta recursiva. Esto no funcionará en 10g porque esa funcionalidad no se agregó hasta 11.2, pero en 11.2+ lo siguiente también sería una solución válida para el problema.
Lo único que faltaba en la consulta del OP era
(YEARS)
.fuente
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
es una tabla específica de oráculo. Otras bases de datos como MS SQL Sever, mysql, postgres permiten declaraciones comoselect expression
. mysql también conoce la tabla dual¿Por qué no simplemente crear una secuencia?
EDITAR:
Para rangos pequeños de valores de secuencia puede usar algo como esto:
Solo necesita una tabla con un número suficiente de filas.
fuente
Aquí hay un ejemplo de agregar varias marcas e incrementarlas en función de la declaración del caso.
- El conjunto de resultados está debajo
fuente
Aumente solo en uno con el rownum select rownum + 100 del orden de "tabla" en 1;
Ese resultado con 101, 102 etc.
fuente