Ir para conteúdo

Arquivado

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

anderson810311

Ao calcular valores ou quantidade o banco multiplica pela quantidade d

Recommended Posts

Pessoal,

Tenho duas tabelas, onde ambas contém repetidamente informações de locais, também com valores e quantidade imputado em ambas tabelas, eu fiz uma junção de ambas pedindo para buscar baseado no "cd" a quantidade recebida de uma tabela e a quantidade recebimento de outra, porém ao colocar para Agrupar o CD e somar as duas quantidade ele me retorna um valor totalmente errado, percebi que ele esta além de somando também esta multiplicando pela quantidade de registro que tem, como se o Group By não estivesse conseguindo resumir, abaixo a instrução:

SELECT
rec_lider.cd AS Unidade,
SUM(rec_lider.total_recebido) AS `Total Recebido`,
SUM(rec_fiscal.total_recebimento) AS `Total Auditado`
FROM rec_lider
INNER JOIN rec_fiscal ON rec_lider.cd = rec_fiscal.cd

GROUP BY rec_lider.cd

Unidade | Total Recebido | Total Auditado

Cajamar I | 52432 | 25268
Cajamar II | 93568512 | 3986304
Itajaí | 140458 | 701400
Osasco | 4866702 | 608220
Alguém pode me ajudar? não consigo trazer a soma correta, pois como mencionei acima me traz um valor multiplicado pelos registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente

SELECT

rec_lider.cd AS Unidade,

rec_lider.total_recebido AS `Total Recebido`,

SUM(rec_fiscal.total_recebimento) AS `Total Auditado`

FROM rec_lider

INNER JOIN rec_fiscal ON rec_lider.cd = rec_fiscal.cd

GROUP BY rec_lider.cd.rec_lider.total_recebido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Muito Obrigado pelo sua ajuda, porém não tive sucesso, tentei oque você me pediu más me retornou as unidade como ja havia antes me retornada, vou tentar explicar melhor mais um pouco para você tentar me ajudar.

Tenho duas tabelas

rec.lider e rec.fiscal, em ambas existe um cadastro onde é mencionado o CD, por tanto as duas tabelas tem vários cds dentro dela com informações que dentro dessas informações tem um registro com a quantidade, se eu colocar apenas uma tabela como abaixo indepedente de qualquer uma das duas:

SELECT
cd AS Unidade,
SUM(total_recebido) AS `Total Recebido`
FROM rec_lider
GROUP BY cd
ela me traz o valor certinho correto consolidado, tudo ok.
Más quando coloco as duas tabelas e dou um join entre cd das duas ela faz estas confusões e tipo multiplica pela , quantidade de registro, resultando nas informações totalmente erradas.
Oque você me pediu para fazer me resultou errado também pois ele agrupou a coluna total.recebido e mostrou tudo fracionado.
Eu vi essa resposta de um outro fórum, não consegui entender, más é + ou - isso aqui abaixo que ele respondeu:
Está multiplicando porque basicamente o que acontece é que para o primeiro join (pedido com pedidos fatura) o banco retorna 3 registros. Para cada um destes 3 registros, o banco traz os tres registros da CONTAS_RECEBER porque todos satisfazem o critério de igualdade com o P.ID

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publique um exemplo de uma unidade sem agrupar e mostre como quer agrupar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vamos lá, vou ver se consigo explicar aqui embaixo:

Tabela 1: rec_lider

Tabela 2: rec_fiscal

tabelas.png

Se você perceber acima, as duas tabelas tem informações como o CD por exemplo, e perceba que ela esta trazendo os valores agrupados pelos CD's porém ele esta multiplicando pela quantidade de registro, como no exemplo de Osasco, ele soma as quantidades e multiplica pela quantidade de registro que Osasco aparece, no caso acima ele multiplica por "4", ai o valor fica totalmente errado.

Com a instrução abaixo:

SELECT
rec_lider.cd,
SUM(rec_lider.total_recebido) AS `SUM(total_recebido)`,
SUM(rec_fiscal.total_recebimento) AS `SUM(total_recebimento)`
FROM rec_lider
INNER JOIN rec_fiscal ON rec_lider.cd = rec_fiscal.cd
GROUP BY rec_lider.cd
Me retorna o erro que esta apontado em vermelho acima "Resultado que Retorna", no caso ele esta fazendo esta multiplicação.
Agora se eu pegar apenas uma tabela e fazer como abaixo, isso com somente uma tabela, fica assim:
SELECT
cd,
SUM(total_recebido) AS `SUM(total_recebido)`
FROM rec_lider
GROUP BY cd
Desse jeito com somente uma tabela ele me retorno certinho, fica os dados correto como a tabela abaixo view abaixo:
resultados.png

Bom, além desses dados tem mais outras coisas na tabela, porém preciso apenas baseado no cd que me traga os CD, Total Recebido e Total Recebimento da outra tabela pelo join do CD.

nao_consolida.png

Espero ter conseguido mostrar oque preciso, como mencionei no começo do fórum, com a instrução abaixo:

SELECT
rec_lider.cd,
SUM(rec_lider.total_recebido) AS `SUM(total_recebido)`,
SUM(rec_fiscal.total_recebimento) AS `SUM(total_recebimento)`
FROM rec_lider
INNER JOIN rec_fiscal ON rec_fiscal.cd = rec_lider.cd
GROUP BY rec_lider.cd
abaixo as telas do gerenciador da query para você ver como esta gerando no passo a passo.
querys.png
querys_02.png
querys_03.png
Não consegui de jeito nenhum, -_-

Mais uma vez, obrigado pela atenção e ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Anderson , creio que falta uma coluna que relacione os registros das duas tabelas além do id , talvez a "data" assim cada registro "lider" fica ligado ao respectivo "fiscal"

SELECT
rec_lider.cd,
SUM(rec_lider.total_recebido) AS `SUM(total_recebido)`,
SUM(rec_fiscal.total_recebimento) AS `SUM(total_recebimento)`
FROM rec_lider
INNER JOIN rec_fiscal ON rec_fiscal.cd = rec_lider.cd
and rec_fiscal.data = rec_lider.data
GROUP BY rec_lider.cd

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Sem chance, você mencionou o ID, não estou trazendo pelo id e sim pelo CD, como mencionei acima, através do cd que são das duas tabelas, baseado nisso ele me trazer o Total_Recebido e Total_Recebimento baseado apenas no critério, CD vs CD e não id.

So complementando, essas duas tabelas são preenchidas separadamente em dois formulários e banco de dados, o ID não esta vinculado e nenhuma outra informações também não esta vinculado, quando criei a tabela eu colocou para ambas colocar através de um ComboBox os CD's nesse caso seria minha referência quando precisasse buscar uma informação entre elas.

Resumindo, não estou usando ID, e as Datas também são diferentes pois são alimentados fora de prazo uma da outra.

Parece ser simples, mas esta me dando uma #@?$%~ dor de cabeça, se tiver mais alguma coisa me passa que tento aqui, pois oque você me passou, sem sucesso novamente. :(

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select *

From

(SELECT

rec_lider.cd,

SUM(rec_lider.total_recebido) AS `SUM(total_recebido)`

FROM rec_lider

GROUP BY rec_lider) lider,

(

SELECT

rec_fiscal.cd,

SUM(rec_fiscal.total_recebimento) AS `SUM(total_recebimento)`

FROM rec_fiscal

GROUP BY rec_fiscal.cd) fiscal

Where lider.cd = fiscal.cd

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Não entendi oque você quis dizer acima, pode me explicar?

Se você quiser eu te passo as duas tabelas em *.sql para você subir em um sql seu e vê oque esta acontecendo. ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select *

From

(SELECT

rec_lider.cd,

SUM(rec_lider.total_recebido) AS `SUM(total_recebido)`

FROM rec_lider

GROUP BY rec_lider) lider,

(

SELECT

rec_fiscal.cd,

SUM(rec_fiscal.total_recebimento) AS `SUM(total_recebimento)`

FROM rec_fiscal

GROUP BY rec_fiscal.cd) fiscal

Where lider.cd = fiscal.cd

Motta,

Não entendi oque você quis dizer acima, pode me explicar?

Se você quiser eu te passo as duas tabelas em *.sql para você subir em um sql seu e vê oque esta acontecendo. ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chegou a rodar o sql acima ?

Olá Motta,

Sim, tentei más não me retornou correto também não, ainda esta dando erro, tipo ele esta trazendo as informações das tabelas, más ele esta multiplicando pela quantidade de registro, resumindo, ainda nada amigão.

Mais alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica o resultado e as linhas sem group by

Olá Mota,

Vou deixar aqui os dois BD, rec_lider e rec_fiscal com uma base simples nela, também um print, se conseguir subir os sql e testar ai vai ver melhor, assim fica mais fácil de você analisar, pode ser?

http://www.logsystem.com.br/forum/rec_lider.sql

http://www.logsystem.com.br/forum/rec_fiscal.sql

rec_fiscal%20-%20Com%20GROUP.png

rec_lider%20-%20Com%20GROUP.png

Se conseguir analise ai, acho que fica mais fácil.

Mais uma vez, Obrigado.

Anderson Maciel

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema parece estar no 2º sql , a tabela rec_lider tem alguma condição a mais ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema parece estar no 2º sql , a tabela rec_lider tem alguma condição a mais ?

Olá Motta, boa tarde.

Então, não tem nenhuma condição não, apenas estão ai do mesmo jeito que postei, o registro ID esta como chave primária porém ela não amarra os dados pois são sequencial, apenas o registro "CD" de ambos que amarra as informações, minha referência entre as tabelas para um Join são "rec_lider.cd" e "rec_fiscal.cd", outras não consigo trazer dados pois ficaram sem amarração e em sequencial.

Resumindo, as tabelas que te passei, estão exatamente como as que estou aqui trabalhando, como mencionei, parece pequeno o problema más difícil de fazer, no final entre as duas tabelas amarrando o join pelo "CD" quero que traga uma informação da "rec_lider" e duas informações da "rec_fiscal".

Acredito que você tenha percebido, quando você coloca apenas uma tabela ela traz correto os CDs com as quantidades, mesmo como um "SUM" na quantidade, tudo certinho, más você colocar qualquer outra tabela junto ele parece que multiplica pelo total de registro que a coluna "CD" tem, isso que é estranho.

Bom, espero que você consiga me ajudar, estou para entregar este detalhe ai, achei que seria hiper simples, más já estou mais de uma semana batendo em fóruns e sites de ajuda, más nada ainda, sem solução para meu problema.

Más muito Obrigado, pela seu tempo em me ajudar.

abraços.

Anderson Maciel

Compartilhar este post


Link para o post
Compartilhar em outros sites

O QUE RETORNA NESTAS SQLs ?

SELECT
rec_lider.cd,
rec_lider.total_recebido
FROM rec_lider
where rec_lider = 'Osasco'




SELECT
rec_fiscal.cd,
rec_fiscal.total_recebimento
FROM rec_fiscal
where fiscal.cd = 'Osasco'

Compartilhar este post


Link para o post
Compartilhar em outros sites

O QUE RETORNA NESTAS SQLs ?

SELECT

rec_lider.cd,

rec_lider.total_recebido)

FROM rec_lider

where rec_lider = 'Osasco'

SELECT

rec_fiscal.cd,

rec_fiscal.total_recebimento)

FROM rec_fiscal

where fiscal.cd = 'Osasco'

Olá Motta,

Coloquei aqui, aparece apenas "Osasco" filtrado porém várias vezes e com valores na frente, tipo cada registro que foi feito como "Osasco" ele repete na busca por não ter "Group By".

Compartilhar este post


Link para o post
Compartilhar em outros sites

então

O QUE RETORNA NESTAS SQLs ?

SELECT *
FROM rec_lider
where rec_lider = 'Osasco'




SELECT *
FROM rec_fiscal
where fiscal.cd = 'Osasco'

a ideia é ver "aberto" mesmo , s´´o para ter noção do conteudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

então

O QUE RETORNA NESTAS SQLs ?

SELECT *

FROM rec_lider

where rec_lider = 'Osasco'

SELECT *

FROM rec_fiscal

where fiscal.cd = 'Osasco'

a ideia é ver "aberto" mesmo , s´´o para ter noção do conteudo

Motta,

Eu fiz separado, oque você colocou ai esta faltando uns parâmetros, seria o caso assim:

Com a instrução abaixo:

SELECT *

FROM rec_lider

where rec_lider.cd = 'Osasco'

Retorna isso abaixo:

bd%20rec_lider.png

Com a instrução abaixo:

SELECT *
FROM rec_fiscal

where rec_fiscal.cd = 'Osasco'

Retorna isso abaixo:

bd%20rec_fiscal.png

Resumindo, ele me mostra somente os parâmetros que contêm "Osasco", tipo esta retornando certinho conforme o filtro pelo CD, más como mencionei acima, se eu colocar a instrução sem "JOIN", e colocando a instrução abaixo com somente uma tabela ele me mostra correto certinho, e se eu colocar um "JOIN" em "rec_lider" e "rec_fiscal" e não colocar as tabelas como "SUM" ele me retorna somente o primeiro resultado do cd e ignora os demais, más quando coloco o "SUM" nas tabelas "total_recebido e total_recebimento" ele faz o número ficar hiper alto, como se ele estivesse multiplicando por alguma coisa.

Veja as telas abaixo que interessante como explicado sobre multiplicando:

resumo%20das%20tabelas.png

Dentro do phpmyadmin:

teste01.png

Bom, ja pesquisei muito, tentei várias coisas aqui, porém sem sucesso, não sei mais oque fazer.

Obrigado pela sua ajuda.

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.