Duvida com Select - CASE

26/05/2015

0

oi,

tenho uma tabela assim:

Profissional - Quantidade - Mês
Nutricionista- 50 - JAN
Nutricionista- 56 - FEV
Nutricionista- 78 - MAR
Nutricionista- 23 - FEV
Medico - 33 - JAN
Enfermeiro - 44 - JAN
Medico - 73 - FEV
Medico - 23 - MAR
Enfermeiro - 24 - JAN
Enfermeiro - 44 - MAR

Como eu crio um comando SELECT para obter a soma dos profissionais por mês?

Profissional - JAN - FEV - MAR
Nutricionista- 50 - 79 - 78

Tentei assim:

select
(case mes when 'JAN' then sum(quantidade) else 0 end),
(case mes when 'FEV' then sum(quantidade) else 0 end),
(case mes when 'MAR' then sum(quantidade) else 0 end)
from producao
where profissional = 'NUTRICIONISTA'
group by mes


ele me retorna assim:

Profissional - JAN - FEV - MAR
Nutricionista- 50 - 0 - 0
Nutricionista- 0 - 79 - 0
Nutricionista- 0 - 0 - 78

alguem pode me ajudar?

abraço.
Italo Pereira

Italo Pereira

Responder

Post mais votado

26/05/2015

Precisa fazer pivot.
Linhas torna-se colunas.

Fabiano Carvalho

Fabiano Carvalho
Responder

Mais Posts

27/05/2015

Marcos P

Não vai funcionar assim... pois você não consegue individualizar os profissionais nas subqueries, sem "abrir" novas linhas no resultado !

Não existe solução trivial para isso !

Pesquise sobre "pivot" no firebird...
Responder

27/05/2015

Italo Pereira

procurei por pivot no firebird e descobri que só é possivel a partir da versao 2
:/

mas to tentando encontrar outras solucoes.
Responder

27/05/2015

Alex Lekao

coloque no where de cada subselect uma relacao com o select principal, coloque apelidos para cada tabela para ficar melhor de fazer, ai fica tipo where p.profissional = p1.profissional, e isso na subselect, ele vai dar uma isolada nesse resultado que vc quer.

nao sei se vai funcionar, mas testa ae.

select 
   distinct(p.profissional),
   (select 
       sum(p1.quantidade)
    from producao as p1
    where p1.mes = 'JAN'
       and p1.profissional =p.profissional
    group by p1.mes) JAN,
   (select 
       sum(p2.quantidade)
    from producao as p2
    where p2.mes = 'FEV' 
       and p2.profissional =p.profissional
    group by p2.mes) FEV,
   (select 
       sum(p3.quantidade)
    from producao as p3
    where p3.mes = 'MAR'
       and p3.profissional =p.profissional
    group by p3.mes) MAR
from producao as p
where (p.mes = 'JAN' or p.mes = 'FEV' or p.mes = 'MAR')


nunca fiz isso no firebird, faco sempre no sql e funciona balinha.

provavelmente vai ficar lento, mas vamos ver no que da, pelo menos resolve a questao no mais urgente, ai vc tera que procurar sobre pivot para melhorar a performance.

abraco.
Responder

27/05/2015

Marisiana Battistella

E se você fizer como no exemplo que você postou na tua pergunta, mas fazendo um CASE para cada mês?
select
   (case mes when 'JAN' then sum(quantidade) else 0 end),
   (case mes when 'FEV' then sum(quantidade) else 0 end),
   (case mes when 'MAR' then sum(quantidade) else 0 end)
from producao
where profissional = 'NUTRICIONISTA'
group by mes
Responder

27/05/2015

Italo Pereira

FaabiianooC, valewwww cara, funcionou perfeitamente.

eu até tinha pensado nisso de ligar o profissional do select interno com o do select principal, mas não sabia como fazer.

agora é só fazer alguns ajustes aqui.

fico muito grato mesmo.
Responder

27/05/2015

Alex Lekao

kkkkkkk

so agora que vi que o fabiano havia sugerido o que sugeri.

kkkkkkkk

eh isso que da so passar o olho nas respostas da galera.

kkkkkkkkkkkkkk
Responder

27/05/2015

Italo Pereira

Obrigado também Alex lekao, toda ajuda é sempre importante.

Sou grato a todos
Responder

27/05/2015

Alex Lekao

sem crise, eu fui na febre para tentar ajudar, pq ja passei por isso aqui onde trabalho entao estava familiarizado, no sql server, ai acabei nao me atentando a sugestao do Fabiano.

e Cara, vc recebeu uma dica dum cara que eh muito bom nessa parada de banco de dados.

aqui no forum temos muita gente boa.

Abraco.
Responder

27/05/2015

Marcos P

Ótimo !
Responder

27/05/2015

Italo Pereira

Realmente conheci muita gente boa em fóruns pela internet.

Atualmente estou andando mais em fóruns de desenvolvimento de jogos, e procuro sempre ajudar no que posso, pois também já passei por muito sufoco com alguns códigos. Kkkk.
Responder

27/05/2015

Marisiana Battistella

Obrigado também Alex lekao, toda ajuda é sempre importante.

Sou grato a todos

Por nada Italo!
Sempre é bom participar dos fóruns, eu mesma já aprendi muito com o pessoal aqui...!
Responder

27/05/2015

Alex Lekao

Legal.

Boa sorte com o seu trabalho.

abraco.

Realmente conheci muita gente boa em fóruns pela internet.

Atualmente estou andando mais em fóruns de desenvolvimento de jogos, e procuro sempre ajudar no que posso, pois também já passei por muito sufoco com alguns códigos. Kkkk.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar