Duvida com Select - CASE
26/05/2015
0
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
Post mais votado
Mais Posts
27/05/2015
Fabiano Carvalho
27/05/2015
Italo Pereira
e nao posso usar um banco mais moderno.
existe alguma forma de fazer isso nele?
27/05/2015
Marisiana Battistella
select p.profissional, p.mes, SUM(p.quantidade) as quantidade from producao p where p.profissional = 'NUTRICIONISTA' and p.mes = 1 --- utilize se precisar filtrar os dados de um determinado mês group by p.profissional, p.mes order by p.profissional, p.mes
27/05/2015
Italo Pereira
profissional - mes - quant
nutricionista- JAN- 10
nutricionista- FEV- 08
nutricionista- MAR- 20
preciso assim:
profissional - JAN - FEV - MAR
nutricionista- 10 - 08 - 20
27/05/2015
Marisiana Battistella
27/05/2015
Marcos P
Pesquise sobre "firebird pivot query", você vai achar material na web sobre isso...
Qual o destino desses dados, serão tratados em algum programa ?
O custo de fazer isso no banco não vale a pena... pegue esse formato indicado pela Marisiana e trate isso do lado da aplicação, é bem mais simples !
27/05/2015
Marisiana Battistella
27/05/2015
Italo Pereira
mas to tentando. sou grato a todos que estão me ajudando, cada dica é sempre válida.
27/05/2015
Alex Lekao
abraco.
27/05/2015
Alex Lekao
mas as colunas ficarao fixas e dos 12 meses.
isso se nao for usar o select aninhado.
no sql server tem um recurso que da muito ganho de desempenho que eh o "partiction by" ele aumenta o desempenho de alguns calculos sem precisar fazer muito malabarismo, nao sei se tem no firebird, mas como uso pouco nao lembro de cor a sintexa e como tbm nao analisei a fundo o que vc precisa nao mencionei nenhuma solucao possivel. rsrsr
boa sorte.
abraco
27/05/2015
Italo Pereira
select distinct(profissional), (select sum(quantidade) from producao where mes = 'JAN' group by mes) JAN, (select sum(quantidade) from producao where mes = 'JAN' group by mes) JAN, (select sum(quantidade) from producao where mes = 'JAN' group by mes) JAN from producao where (mes = 'JAN' or mes = 'FEV' or mes = 'MAR')
tá me retornando assim:
profissional - JAN - FEV - MAR
nutricionista- 200- 200- 200
enfermeiro - 200- 200- 200
medico - 200- 200- 200
ele está na estrutura que eu quero, mas está somando todos os campos. estou quase acertando, se tiverem mais uma dica, serei grato.
27/05/2015
Marcos P
select distinct(profissional), (select sum(quantidade) from producao where mes = 'JAN' group by mes) JAN, (select sum(quantidade) from producao where mes = 'FEV' group by mes) FEV, (select sum(quantidade) from producao where mes = 'MAR' group by mes) MAR from producao where (mes = 'JAN' or mes = 'FEV' or mes = 'MAR')
27/05/2015
Italo Pereira
profissional - JAN - FEV - MAR
nutricionista- 200- 250- 300
enfermeiro - 200- 250- 300
medico - 200- 250- 300
ou seja, ele soma o valor dos tres profissionais, mas agora por mês.
estamos quase lá ^^
Clique aqui para fazer login e interagir na Comunidade :)