Fórum Select com sumarização, unindo várias tabelas. #480044
24/05/2014
0
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
Curtir tópico
+ 0Post mais votado
30/05/2014
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
Gostei + 1
Mais Posts
30/05/2014
Isaac Jose
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.
Gostei + 1
31/05/2014
Marisiana Battistella
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
Gostei + 1
03/06/2014
Marisiana Battistella
Gostei + 0
07/06/2014
Daniel Pinto
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!!!
Gostei + 0
10/06/2014
Marisiana Battistella
Se vc executar sem a cláusula SUM, retorna o valor que vc precisa?
Gostei + 0
23/06/2014
Marisiana Battistella
Gostei + 0
27/06/2014
Daniel Pinto
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)