Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vanhelmont

[Resolvido] SUM + CASE

Recommended Posts

Amigos, então a sql abaixo funcionou a principio, porém... se algum funcionarios tiver mais de 1 entrada, de qualquer tipo, ele repete o salario do funcionario quantas vezes houverem entradas para o mesmo...o que no final das contas dá um numero absurdo, pois cada funcionarios tem pelo menos 1 entrada de cada tipo... se alguem souber como resolver eu agradeço, o problema eu consigo enxergar está no left join, que mostra todas as linhas de entradas do funcionario, e age como um 'OR' apenas repetindo as linhas, abaixo segue a sql, a ultima que eu fiz...

 

SELECT
SUM(funcionarios.salario) AS Total_Salario,
SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'almoco' THEN entradas.valor ELSE 0 END) AS Total_Almoco,
SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'transporte' THEN entradas.valor ELSE 0 END) AS Total_Transporte,
SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'vale' THEN entradas.valor ELSE 0 END) AS Total_Vale,
(SUM(funcionarios.salario)-SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'almoco' THEN entradas.valor ELSE 0 END)+SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'transporte' THEN entradas.valor ELSE 0 END)-SUM(CASE WHEN entradas.valor <> '' AND entradas.tipo = 'vale' THEN entradas.valor ELSE 0 END)) AS Total_Custo
FROM funcionarios left join entradas on (entradas.funcionario = funcionarios.id) AND (entradas.`data` BETWEEN '2010-09-01' AND '2010-09-30');

Fiz um subselect que virou uma "gambiarra" eu gostaria de saber fazer esse ajuste pelo left joi

 

a sql ficou assim

 

SELECT
(SELECT SUM(salario) from funcionarios),
SUM(CASE WHEN entradas.tipo = 'almoco' THEN entradas.valor ELSE 0 END) AS almoco,
SUM(CASE WHEN entradas.tipo = 'transporte' THEN entradas.valor ELSE 0 END) AS transporte,
SUM(CASE WHEN entradas.tipo = 'vale' THEN entradas.valor ELSE 0 END) AS vale,
(funcionarios.salario-SUM(CASE WHEN entradas.tipo = 'almoco' THEN entradas.valor ELSE 0 END)+SUM(CASE WHEN entradas.tipo = 'transporte' THEN entradas.valor ELSE 0 END)-SUM(CASE WHEN entradas.tipo = 'vale' THEN entradas.valor ELSE 0 END)) AS custo
FROM funcionarios left join entradas on (entradas.funcionario = funcionarios.id) AND (entradas.`data` BETWEEN '2010-09-01' AND '2010-09-30');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá... Bom dia...

Gostaria de uma ajuda para fazer funcionar este select:

 

SELECT tp_arrecadacao,
SUM (valor) AS valor
from
(
SELECT rd.tp_arrecadacao,
if (rd.tp_arrecadacao = 'despesas' ,valor,0) vl_despesas,
if (rd.tp_arrecadacao = 'receitas' ,valor,0) vl_receitas
FROM ft_receitas_despesas rd
) saldo

GROUP BY tp_arrecadacao, valor
;

 

apresenta o seguinte erro:

ERROR: Function if(boolean, float, int) does not exist, or permission is denied for if(boolean, float, int)




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.