Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Inner Join somando errado.


Eron Pessoa

Pergunta

Prezados,

Estou enfrentando um problema e por mais que tenho pesquisado, não encontro solução. Tenho duas tabelas:

DOADORES - tabela de pessoas jurídicas que efetuaram doações, campos:

CNPJ

NOME

ENDERECO

DOACOES - tabela que possui as doações efetuadas pelos doadores, campos

CNPJ2

VALOR

Nem todos os DOADORES efetuaram DOAÇÕES. Preciso identificar o valor total das doações. Para isso, tentei com o INNER JOIN:

SELECT cnpj2, SUM(valor) FROM doacoes

INNER JOIN doadores ON doacoes.cnpj2 = doadores.cnpj

GROUP BY doacoes.cnpj2

O resultado é:

doador--------------------sum(valor)

61522512000115------404995000.00

61564639000118------1200000.00

Ocorre que quando pego os dois CNPJs acima e faço um SELECT SUM direto na Tabela DOACOES (sem o inner join), a soma é completamente diferente, vejam:

SELECT SUM(VALOR) FROM DOACOES

WHERE cnpj2 = '61522512000115' or cnpj2 = '61564639000118'

Resultado:

sum(valor)

38850000.00

Em resumo, o resultado do campo VALOR com Inner Join é R$ 406.195.000,00, enquanto que a soma pelo SELECT SUM é R$ 3.885.000,00, sendo que o valor correto é o apresentado pelo SELECT SUM.

O que pode estar acontecendo? A impressão que tenho é que o INNER JOIN está multiplicando o campo valor, mas não consigo estabelecer a relação. Tenho lido bastante a respeito de Inner, Left e Right Join, mas não consigo resolver essa questão.

A quem puder ajudar, antecipadamente manifesto meus agradecimentos.

Obrigado pela atenção.

Eron

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

i aew Eron Pessoa, bom o que pode estar acontecendo é o seguinte, você está utilizando inner join com os campos cnpj e cnpj2 e como você disse nem todos os doadores

efetuaram doaçoes, logo então pode ser que os cnpj da tabela DOADORES não esteja na tabela DOACOES, o inner join vai puxar apenas os dados que sejam identicos nas duas tabelas, então sujiro você tentar assim:

SELECT cnpj2, SUM(valor) FROM doacoes LEFT JOIN doadores ON doacoes.cnpj2 = doadores.cnpj
GROUP BY doacoes.cnpj2

qualquer coisa posta aew, abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Eron Pessoa'!

Tente assim:

select dd.cnpj, dc.soma from
doadores dd
INNER JOIN (SELECT cnpj2, SUM(valor) as soma FROM doacoes GROUP BY doacoes.cnpj2) dc
ON dd.cnpj = dc.cnpj

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Romerito,

Eu havia tentado anterior o uso do LEFT JOIN, de qualquer sorte, também fiz o procedimento sugerido. Em ambos os casos, o resultado da soma estava em muito superior.

Alternativamente, testei o code sugerido pelo Denis o que funcionou corretamente. Estudarei ele para aplicá-lo em outras consultas semelhantes.

Meus agradecimentos pela sua presteza em me atender.

Grato.

Eron

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...