none
Erro em soma RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Primeiro de tudo, vejam esta query:

    SELECT c.nome, p.projeto,
    (vt.valor * vtc.quantidade) * (d.diasuteis - vc.desconto_dias)
    FROM vt_compra vc
    JOIN vale_transporte vt ON vc.id_vt = vt.id_vt
    JOIN vt_colaborador vtc ON vc.id_vt = vtc.id_vt
    JOIN tb_colaborador c ON vc.id_colaborador = c.id_colaborador
    JOIN projetos p	ON vc.id_projeto = p.id_projeto
    JOIN diasuteis d ON vc.id_diasuteis = d.id_diasuteis
    WHERE vc.referencia = 1072014
    GROUP BY c.nome, vc.id_colaborador, p.projeto, vt.valor, vtc.quantidade, d.diasuteis, vc.desconto_dias
    ORDER BY c.nome
    
    

    O resultado é este:

    AMANDO FERNANDO DA SILVA                            DHL                          204,60
    ANA MARIA NETA                                MATRIZ - PORTARIA/LIMPEZA    102,30
    ANA MARIA NETA                                MATRIZ - PORTARIA/LIMPEZA    204,60
    ANDREONI NUNES DA CRUZ COSTA       AXALTA NUCLEO FISCAL          36,00
    ANDREONI NUNES DA CRUZ COSTA       AXALTA NUCLEO FISCAL          72,00

    Até aqui tudo bem.

    Mas, eu quero somar, agrupando por funcionario. Entao, coloco uma função SUM() na linha de valor, e vejam o resultado:

    AMANDO FERNANDO DA SILVA                             DHL                          409,20
    ANA MARIA NETA                               MATRIZ - PORTARIA/LIMPEZA    3580,50
    ANDREONI NUNES DA CRUZ COSTA      AXALTA NUCLEO FISCAL        1224,00

    A query é esta:

    SELECT c.nome, p.projeto,
    SUM((vt.valor * vtc.quantidade) * (d.diasuteis - vc.desconto_dias))
    FROM vt_compra vc
    JOIN vale_transporte vt ON vc.id_vt = vt.id_vt
    JOIN vt_colaborador vtc ON vc.id_vt = vtc.id_vt
    JOIN tb_colaborador c ON vc.id_colaborador = c.id_colaborador
    JOIN projetos p ON vc.id_projeto = p.id_projeto
    JOIN diasuteis d ON vc.id_diasuteis = d.id_diasuteis
    WHERE vc.referencia = 1072014
    GROUP BY c.nome, p.projeto
    ORDER BY c.nome

    Não consigo achar o erro de jeito algum, será que alguém pode me dar uma força, por gentileza?

    Obrigado.



    Leonardo D'Amato

    quinta-feira, 17 de julho de 2014 18:43

Respostas

  • Deleted
    quinta-feira, 17 de julho de 2014 22:29
  • José,

    Era exatamente isso. O Group By de maneira equivocada estava prejudicando minha query. Estava agrupando os valores iguais, os transformando em uma linha. Como a maioria dos valores de cada funcionários eram iguais, acaba por virar uma linha só e com o valor certo, o que me fez achar que estava correto.

    Problema resolvido. Muitíssimo obrigado.

    Um abraço


    Leonardo D'Amato

    sexta-feira, 18 de julho de 2014 14:19

Todas as Respostas

  • Acredito que o SUM ali esteja na posição errada, ele deve ta somando o total de dias uteis cada vez que ele encontra uma linha.

    Tente:

    ((SUM(vt.valor) * vtc.quantidade) * (d.diasuteis - vc.desconto_dias))


    Eu faria também um teste em cada campo de valor ali, por ex, adicionava uma coluna pra cada valor e veja qual esta retornando um valor muito alto.

    SUM(vt.valor) as vt.valor,

    SUM(vtc.quantidade) as vtc.quantidade etc....

    quinta-feira, 17 de julho de 2014 20:21
  • Deleted
    quinta-feira, 17 de julho de 2014 22:29
  • José,

    Era exatamente isso. O Group By de maneira equivocada estava prejudicando minha query. Estava agrupando os valores iguais, os transformando em uma linha. Como a maioria dos valores de cada funcionários eram iguais, acaba por virar uma linha só e com o valor certo, o que me fez achar que estava correto.

    Problema resolvido. Muitíssimo obrigado.

    Um abraço


    Leonardo D'Amato

    sexta-feira, 18 de julho de 2014 14:19