como criar número incremental na consulta oracle sql sem criar nenhuma tabela? Eu tentei usar a cláusula "with", mas não consegui obter o resultado esperado. estou usando 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
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.
Semelhante à resposta de Kerri, mas sem o
with
(e inspirado por uma resposta SO ):Ou se o seu objetivo é obter o ano atual nos três anteriores, sem codificar o ano de início:
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+ o seguinte também seria uma solução válida para o problema.
A única coisa que faltava na consulta do OP era
(YEARS)
.Por que não apenas criar uma sequência?
EDITAR:
Para pequenos intervalos de valores de sequência, você pode usar algo assim:
Você só precisa de uma tabela com um número suficiente de linhas.
Aqui está um exemplo de adicionar vários sinalizadores e incrementá-los com base na instrução case.
-- O conjunto de resultados está abaixo
Aumente apenas em um com o rownum selecione rownum + 100 da "tabela" ordem por 1;
Esse resultado com 101, 102 etc.