AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 3140
Accepted
50LV3R
50LV3R
Asked: 2011-06-03 19:11:13 +0800 CST2011-06-03 19:11:13 +0800 CST 2011-06-03 19:11:13 +0800 CST

criar número incremental na consulta oracle sql

  • 772

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
oracle-10g
  • 6 6 respostas
  • 106337 Views

6 respostas

  • Voted
  1. Kerri Shotts
    2011-06-03T20:56:38+08:002011-06-03T20:56:38+08:00

    Acho que isso funcionará (com base nesta página ( http://psoug.org/definition/LEVEL.htm ) como ponto de partida):

    WITH counter
    AS ( SELECT LEVEL seq
           FROM DUAL
         CONNECT BY LEVEL <= 4 )
    SELECT (2008 + seq - 1) myYear
      FROM counter
     ORDER BY 1
    ;
    

    Isso deve retornar:

    myYear
    ------
      2008
      2009
      2010
      2011
    

    Ajuste 2008 e 4 para obter resultados diferentes.

    • 17
  2. Best Answer
    Alex Poole
    2011-06-04T01:49:14+08:002011-06-04T01:49:14+08:00

    Semelhante à resposta de Kerri, mas sem o with(e inspirado por uma resposta SO ):

    SELECT 2007 + LEVEL AS YEARS
    FROM DUAL
    CONNECT BY LEVEL <= 4;
    
         YEARS
    ----------
          2008
          2009
          2010
          2011
    

    Ou se o seu objetivo é obter o ano atual nos três anteriores, sem codificar o ano de início:

    SELECT EXTRACT(YEAR FROM SYSDATE) + 1 - LEVEL AS YEARS
    FROM DUAL
    CONNECT BY LEVEL <= 4
    ORDER BY YEARS;
    
    • 14
  3. Leigh Riffel
    2012-03-22T14:01:22+08:002012-03-22T14:01:22+08:00

    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.

    WITH T3(Years) AS (
       SELECT 2008 Years FROM dual
       UNION ALL
       SELECT Years + 1 FROM T3 WHERE Years < 2011
       )
    SELECT * FROM T3;
    

    A única coisa que faltava na consulta do OP era (YEARS).

    • 5
  4. bernd_k
    2011-06-03T21:16:48+08:002011-06-03T21:16:48+08:00

    Por que não apenas criar uma sequência?

    CREATE SEQUENCE TEMP_YEAR_sEQUENCE START WITH 2008;
    
    SELECT TEMP_YEAR_sEQUENCE.NEXTVAL FROM DUAL; 
    
    ....
    
    DROP SEQUENCE TEMP_YEAR_SEQUENCE;
    

    EDITAR:

    Para pequenos intervalos de valores de sequência, você pode usar algo assim:

    select ROWNUM + 10   # start value
    from ALL_OBJECTS 
    where ROWNUM <= 5 ;  # count of values 
    

    Você só precisa de uma tabela com um número suficiente de linhas.

    • 4
  5. Suyaraj Mariappan
    2015-12-22T07:28:17+08:002015-12-22T07:28:17+08:00

    Aqui está um exemplo de adicionar vários sinalizadores e incrementá-los com base na instrução case.

    WITH T3(FLAG1,FLAG2,FLAG3,tt,OTHER_DATA)  
    AS (    
    SELECT '0' FLAG1, '0' FLAG2, '0' FLAG3 , current_timestamp  tt , 'dummy'  OTHER_DATA 
    FROM dual 
    UNION ALL  
    SELECT case when cast( FLAG2 as int) > 5 then
    cast ((cast(FLAG1 as int) + 1) as varchar2(30)) else  FLAG1 end FLAG1,
    cast((cast(FLAG2 as int) + 1) as varchar2(30)) FLAG2  ,case when (
    (FLAG2 ='3') or (FLAG2 = '4')) then cast ((cast(  FLAG3 as int) + 1)
    as varchar2(30)) else FLAG3 end FLAG3  ,current_timestamp  tt ,
    'ACTUAL' OTHER_DATA FROM T3 WHERE FLAG2 < 10   
    )
    SELECT * FROM T3
    WHERE OTHER_DATA != 'dummy' ;
    

    -- O conjunto de resultados está abaixo

    Flag1   Flag2   Flag3   TT                                              OTHER_DATA
    0       1       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    0       2       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    0       3       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    0       4       1       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    0       5       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    0       6       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    1       7       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    2       8       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    3       9       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
    4      10       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL   
    
    • -1
  6. L.Luca
    2017-07-28T22:16:50+08:002017-07-28T22:16:50+08:00

    Aumente apenas em um com o rownum selecione rownum + 100 da "tabela" ordem por 1;

    Esse resultado com 101, 102 etc.

    • -1

relate perguntas

  • Rastreando, depurando e corrigindo contenções de bloqueio de linha

  • Obtendo o erro "ORA-00911" quando tento inserir mais de 1 linha

  • Executar bloco de script PL/SQL em C#

  • Como posso remover bloqueios em um objeto?

  • Como obter o documento XML virtual subjacente do Oracle Text Index?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve