› Fóruns › SQL e PL/SQL › Ajuda com SQL
- Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 11 meses atrás por
xt225.
-
AutorPosts
-
14 de agosto de 2012 às 12:09 am #104259
xt225
ParticipanteBoa 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]Attachments:14 de agosto de 2012 às 3:10 pm #104261Marcio Monteiro
ParticipanteOlá,
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;14 de agosto de 2012 às 8:30 pm #104268Fábio Prado
Participantext225,
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.net14 de agosto de 2012 às 9:36 pm #104270xt225
ParticipantePessoal, muito obrigado pela ajuda!
Utilizei a informação disponibilizada pelo Marcioozal e funcionou perfeitamente.
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Ajuda com SQL