9
respostas

Erro de soma de valores ao adicionar uma JOIN

Bom dia. Poderia me explicar o porque de quando eu adiciono uma JOIN, é adicionado um caractere 0 no final de uma soma de valores (campo fat_total_2017)?

Query 1 - OK

cod_cliente, cliente, representante, fam_comercial, qtde_faturada, fat_total_2017

'1652', 'RANDON S/A IMPL PARTICIPACOES', 'MARCELO MARZOTTO', '301', '6762', 'R$ 514.136,00'

SELECT
     tc.`cod-emitente` AS cod_cliente,
     tc.`nome-emit` AS cliente,
     tr.`nome` AS representante,
     fg.`fm-cod-com` AS fam_comercial,
     sum(fg.`qt-faturada`) AS qtde_faturada,
     CONCAT('R$ ', REPLACE(REPLACE(REPLACE(format(sum(fg.`vl-merc-liq`), 2),'.',';'),',','.'),';',',')) AS fat_total_2017
FROM tb_clientes tc 
INNER JOIN tb_representantes tr ON tr.`cod-rep` = tc.`cod-rep` 
INNER JOIN faturamento_global fg ON fg.`cod-emitente` = tc.`cod-emitente` 
WHERE tc.`cod-emitente` > '4'
AND fg.`data-estat` >= '2017-01-01'
AND fg.`fm-cod-com` = 301
AND fg.`ind-devolucao` = 0
AND tc.`cod-emitente` = 1652
GROUP BY fg.`fm-cod-com`, tc.`cod-emitente`

Query 2 - NOK

cod_cliente, cliente, representante, qtde_visita, fam_comercial, qtde_faturada, fat_total_2017

'1652', 'RANDON S/A IMPL PARTICIPACOES', 'MARCELO MARZOTTO', '10', '301', '67620', 'R$ 5.141.360,00'

SELECT
     tc.`cod-emitente` AS cod_cliente,
     tc.`nome-emit` AS cliente,
     tr.`nome` AS representante,
     count(distinct(av.`CodVisita`)) AS qtde_visita,
     fg.`fm-cod-com` AS fam_comercial,
     sum(fg.`qt-faturada`) AS qtde_faturada,
     CONCAT('R$ ', REPLACE(REPLACE(REPLACE(format(sum(fg.`vl-merc-liq`), 2),'.',';'),',','.'),';',',')) AS fat_total_2017
FROM tb_clientes tc 
INNER JOIN tb_representantes tr ON tr.`cod-rep` = tc.`cod-rep` 
INNER JOIN faturamento_global fg ON fg.`cod-emitente` = tc.`cod-emitente` 
INNER JOIN agnd_visitas av ON av.`idDestino` = tc.`cod-emitente`
WHERE tc.`cod-emitente` > '4'
AND av.`dtVisita2` >= '2017-01-01'
AND fg.`data-estat` >= '2017-01-01'
AND fg.`fm-cod-com` = 301
AND fg.`ind-devolucao` = 0
AND tc.`cod-emitente` = 1652
GROUP BY fg.`fm-cod-com`, tc.`cod-emitente`

Obrigado.

9 respostas

Fala Grande,

Uu não fiz este curso para te responder 100%, mais observando seus SQLs deve faltar algum vinculo referente a tabela agnd_visitas, você deve ter 10 registros nesta tabela agnd_visitas, por isto aumenta em 10 vezes o valor.

como falta vinculo o sistema repete o mesmo valor 10 vezes.

Atenciosamente.

Boa tarde William. Havia um erro de digitação no segundo código quando eu fiz este post, já removi a # da INNER JOIN da Query2 da postagem. Quanto aos 10 registros, não entendi? Obrigado pela resposta.

Certo,

Por favor execute este comando SELECT COUNT(*) FROM agnd_visitas;

E retorne o resultado.

Resultado:

SELECT COUNT(*) FROM agnd_visitas

COUNT(*) = 7189

O que eu fiz pra resolver por enquanto é dividir o valor por 10, porém, o ideal se possível é descobrir a causa.

CONCAT('R$ ', REPLACE(REPLACE(REPLACE(format(sum(fg.vl-merc-liq / 10), 2),'.',';'),',','.'),';',',')) AS fat_total_2017

Boa tarde, ainda não consigo descobrir o problema. Vamos lá.

Por favor, execute estes comandos

SELECT COUNT() FROM tb_clientes; SELECT COUNT() FROM tb_representantes; SELECT COUNT(*) FROM tb_faturamento_global;

Atenciosamente.

Bom dia Willian, seguem os resultados. tb_clientes = 4715, tb_representates = 37, faturamento_global = 88099

Boa tarde William! Percebi que o problema todo ocorre quando insiro a tabela "agnd_visitas", se eu tirar ela, não tenho este problema.

Boa tarde,

O estranho é que para multiplicar por 10 esta tabela deva estar retornando 10 registros para cada associação, o correto é 1 para 1, falta algum vinculo ainda.

E difícil está descobrir qual, pega um único registro e tira o group by e tenta ir matando tabela por tabela até descobrir o que pode estar fazendo quebrar o valor.

Atenciosamente.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software