Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #104259
    Avatar de xt225xt225
    Participante

      Boa tarde a todos! Tenho uma query para listar o nome do funcionários, o ano de nascimento desses funcionários, a idade deles e em qual intervalo de idade os mesmos se enquadram. A query executou corretamente mas caso eu tente agrupar os dados pela coluna de intervalo de idade, apresenta o erro ORA-00904. Segue a query utilizada:
      [size=3]SELECT DISTINCT
      NOME,
      To_Char(DATANASCIMENTO,’YYYY’) ANO_NASCIMENTO,
      TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’) IDADE,
      CASE
      WHEN TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)<'18' THEN 'ATÉ 18 ANOS' WHEN TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(DATANASCIMENTO,'YYYY')>=’18’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)<='25' THEN 'DE 18 A 25 ANOS' WHEN TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(DATANASCIMENTO,'YYYY')>’25’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)<='35' THEN 'DE 25 A 35 ANOS' WHEN TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(DATANASCIMENTO,'YYYY')>’35’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)<='50' THEN 'DE 35 A 50 ANOS' WHEN TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(DATANASCIMENTO,'YYYY')>’50’ THEN ‘ACIMA DE 50 ANOS’
      END INTERVALO
      FROM PESSOAS
      WHERE INATIVO=’0′ AND TIPOPESSOA=’F’
      GROUP BY IDADE
      ORDER BY NOME[/size]

      #104261
      Avatar de Marcio MonteiroMarcio Monteiro
      Participante

        Olá,

        Vê se assim funciona:

        with tmp as (SELECT DISTINCT
        NOME,
        To_Char(DATANASCIMENTO,’YYYY’) ANO_NASCIMENTO,
        TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’) IDADE,
        CASE
        WHEN TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)=’18’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)’25’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)’35’ AND TO_CHAR(SYSDATE,’YYYY’)-TO_CHAR(DATANASCIMENTO,’YYYY’)’50’ THEN ‘ACIMA DE 50 ANOS’
        END INTERVALO
        FROM PESSOAS
        WHERE INATIVO=’0′ AND TIPOPESSOA=’F’
        ORDER BY NOME)
        Select INTERVALO,count(*) from tmp group by INTERVALO;

        #104268
        Avatar de Fábio PradoFábio Prado
        Participante

          xt225,

          Vc não pode fazer agrupamento pelo apelido que vc deu à coluna dos intervaldos de idade. Repita toda a instrução CASE (sem o apelido) na cláusula GROUP BY que irá funcionar.

          []s

          Fábio Prado
          http://www.fabioprado.net

          #104270
          Avatar de xt225xt225
          Participante

            Pessoal, muito obrigado pela ajuda!

            Utilizei a informação disponibilizada pelo Marcioozal e funcionou perfeitamente.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress