como criar um número incremental na consulta oracle sql sem criar nenhuma tabela? Eu tentei usar a cláusula "with", mas não obtive o resultado esperado. Estou usando o oracle 10g
aqui está o código que eu tento, parece não funcionar:
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
resultado esperado que eu quero é:
2008
2009
2010
2011
oracle-10g
50LV3R
fonte
fonte
Eu acho que isso funcionará (com base nesta página ( http://psoug.org/definition/LEVEL.htm ) como ponto de partida):
Isso deve retornar:
Ajuste 2008 e 4 para obter resultados diferentes.
fonte
Parece que o OP estava tentando resolver o problema usando uma subconsulta recursiva. Isso não funcionará em 10g porque essa funcionalidade não foi adicionada até 11.2, mas em 11.2 ou superior, o seguinte também seria uma solução válida para o problema.
A única coisa que faltava na consulta do OP era
(YEARS)
.fonte
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
é uma tabela específica do oracle. Outros bancos de dados como MS SQL Sever, mysql, postgres permitem declarações comoselect expression
. mysql faz saber a uma dupla mesa tambémPor que não apenas criar uma sequência?
EDITAR:
Para pequenos intervalos de valores de sequência, você pode usar algo como isto:
Você só precisa de uma tabela com um número suficiente de linhas.
fonte
Aqui está um exemplo de adicionar vários sinalizadores e incrementá-los com base na instrução de caso.
- O conjunto de resultados está abaixo
fonte
Aumente apenas um com o rownum e selecione rownum + 100 da ordem "tabela" em 1;
Esse resultado com 101, 102 etc.
fonte