Fórum Select com sumarização, unindo várias tabelas. #480044

24/05/2014

0

Boa noite, pessoal.

Possuo uma aplicação que roda sobre a seguinte estrutura firebird:

TABELA CONTAS CORRENTES TABELA DE ITENS VENDIDOS TABELA CADASTRO DE PRODUTOS
VENDA_NUMERO VENDA_NUMERO PRODUTO_CODIGO
ITEM_NUMERO PRODUTO_CODIGO CLASSE_CODIGO
VALOR_DESCONTO

O que necessito: Sumarizar, agrupando por CLASSE_CODIGO, o campo VALOR_DESCONTO.

Utilizei a sql abaixo:

Select A.CLASSE_CODIGO, SUM(B.CONTA_VALOR_DESCONTO)

From CADASTRO_PRODUTOS A, CADASTRO_CONTAS_A_RECEBER B, CADASTRO_VENDAS_ITENS C

Where A.PRODUTO_CODIGO = C.PRODUTO_CODIGO

and C.VENDA_NUMERO = B.VENDA_NUMERO

and B.CONTA_DATA_PAGAMENTO IS NOT NULL AND B.CONTA_VALOR_DESCONTO > 0

and B.CONTA_DATA_EMISSAO = '2014/03/13'

Group By A.CLASSE_CODIGO

Entretanto, uma venda apresenta dois itens distintos, embora de classes iguais. O valor total do desconto, nessa parcela, foi de R$ 80,00. Como são dois itens, o sistema está retornando R$ 160,00. Não estou conseguindo ver a luz no fim do túnel. Alguém tem alguma dica? Obrigado.
Daniel Pinto

Daniel Pinto

Responder

Post mais votado

30/05/2014

Oi Boa tarde!!!

Desculpe mas eu nao consegui entender.

Pelo que olhei na sua consulta para mim esta normal.

experimente adicionar mais campos para agrupar.

vc esta precisando de que especificamente?

Espero ter ajudado.

Abraco.

Alex - Lekao

Alex Lekao

Alex Lekao
Responder

Gostei + 1

Mais Posts

30/05/2014

Isaac Jose

Boa tarde não entendi direito vc quer somar os valores porem tem dois itens distintos?
eu costumo fazer o select vendo todos os campos distintos , depois vou fazendo os agrupamentos necessarios.
adicione o campo de itens no select e se tiver algum outro campo que possa dar divergencia no group by add tambem.
Responder

Gostei + 1

31/05/2014

Marisiana Battistella

Posso estar enganada, mas eu acho que o problema está nos joins que você criou, eles devem ser "chave estrangeira = chave primária" e você criou ao contrário.
Isso às vezes interfere no retorno dos dados pelo SQL.
A estrutura de tabelas que você apresentou não está coerente com os campos que vc utilizou no SQL...
Tenta executar assim pra ver se funciona, estou sem o firebird aqui aqui pra testar...
select p.classe_codigo,
          SUM(cr.conta_valor_desconto) as totaldesconto
from cadastro_produtos p
join cadastro_vendas_itens cvi
on cvi.produto_codigo = p.produto_codigo
join cadastro_contas_a_receber cr
on cvi.venda_numero = cr.venda_numero
where cr.conta_data_pagamento IS NOT NULL
and cr.conta_valor_desconto > 0
and cr.conta_data_emissao = '2014/03/13'
group by p.classe_codigo
Responder

Gostei + 1

03/06/2014

Marisiana Battistella

Daniel, você conseguiu resolver?
Responder

Gostei + 0

07/06/2014

Daniel Pinto

Olá Pessoal, boa noite. Primeiramente gostaria de agradecer à colaboração de todos. E desculpar-me pela demora na resposta, pois estive viajando, sem acesso ao site.

Vou tentar explicar mais detalhadamente o que preciso. Marisiana, o resultado que obtive com o seu código acabou por ser igual ao que consegui com o código que eu havia elaborado... entende meu dilema? rsrsrs... bom vamos la...

Eu preciso gerar um relatório que apresentará ao gestor, informações sobre Produtos Vendidos x Lucro, para análise gerencial. Para tanto, eu preciso listar o valor total vendido por classe (está feito). Também preciso sumarizar o valor do desconto concedido no ato da venda, por classe (também está feito). Esses dois valores foram fáceis, pois linko a tabela de itens vendidos com o cadastro de produto e sumarizo os campos de valor do produto e valor dos descontos, agrupando por classes.

No entanto, entra na história, uma terceira tabela, que é a de contas a receber. Nessa tabela, ficam armazenadas as informações financeiras. Se, por exemplo, no ato do pagamento, foi ofertado um desconto ao cliente, esse valor ficará registrado nessa tabela. O que preciso: sumarizar o desconto concedido na tabela de contas a receber, por venda. depois, caso a venda possua mais de um item, calcular o % correspondente do desconto sobre cada um dos produtos; identificar à qual classe pertence cada produto e por fim, sumarizar esse valor por classes, para inseri-lo, posteriormente, na primeira query, que faz a totalização da tabela de itens vendidos...

O que ocorre é que, no exemplo que eu passei e no código citado pela Marisiana, quando o sistema sumariza o valor do desconto, nesse dia específico (que estou usando para testes), uma venda apresenta dois produtos. O desconto na parcela foi de 30,00. Como são dois produtos, o sistema esta dobrando o valor e retornando 60,00. E é aí que o sql está emperrado...

Espero ter conseguido explicar a salada que estou tentando digerir...rsrsrs... E novamente agradeço a colaboração de todos...

Obrigado!!!
Responder

Gostei + 0

10/06/2014

Marisiana Battistella

Mas nesse caso, o erro não está em somar o valor de desconto?
Se vc executar sem a cláusula SUM, retorna o valor que vc precisa?
Responder

Gostei + 0

23/06/2014

Marisiana Battistella

Daniel, conseguiu achar a solução?
Responder

Gostei + 0

27/06/2014

Daniel Pinto

Boa tarde,

Desculpe-me novamente pela demora na resposta. A correria realmente está me deixando maluco. Tentei sua sugestão, retirando o sum. Entretanto, nesse caso, ele devolve-me todos os descontos que ocorreram em determinadas classes... Tipo:
Classe Desconto
1 4,00
1 11,50
1 23,00
2 0,40 ...

E eu preciso assim:
Classe Desconto
1 38,50
2 0,40 ...

Temporariamente, o cliente tem feito os cálculos manualmente, mas queria poder resolver essa questão...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar