Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal,
Esbarrei em um novo problema com consultas no meu sistema.
Tenho um formulário no sistema que deverá apresentar todos os materiais utilizados em uma determinada Venda e seus respectivos estoques obtidos através da soma das entradas e saidas do estoque.
Para isso devo buscar os dados em 3 tabelas do banco de dados sendo elas VendasProdutos, Composicao, Materiais e Estoque
Eis que surge meu problema, como posso ter vários produtos na venda e alguns produtos usam os mesmos materiais, a consulta está retornando com os materiais duplicados, quando o que eu gostaria era que somasse de acordo com cada material.
A query que estou usando para teste no acesso é a seguinte:
SELECT Composicao.IdMaterial, materiais.descricao, Sum(Estoque.Quantidade) AS Estoque, [VendasProdutos]![Quantidade]*[Composicao]![Quantidade] AS TotalUtilizado
FROM (VendasProdutos LEFT JOIN (materiais RIGHT JOIN Composicao ON materiais.ID = Composicao.IdMaterial) ON VendasProdutos.IdProduto = Composicao.IdProduto) LEFT JOIN Estoque ON materiais.ID = Estoque.IdMaterial
GROUP BY Composicao.IdMaterial, materiais.descricao, [VendasProdutos]![Quantidade]*[Composicao]![Quantidade], VendasProdutos.IdVenda
HAVING (((VendasProdutos.IdVenda)=1));
A consulta está retornando os dados dessa forma:

E eu gostaria de que agrupasse por ex:
ID Descricao Estoque TotalUtilizado
1 Capa Agenda 34 10
2 Miolo Agenda 27 5
Alguem Sabe como posso fazer isso?
Desulpem pelo post gigante, mas não sabia como explicar melhor.Montei ela dentro do gerador de consulta do Access.
Uso o Access pois me permite realizar os testes mais rapidos.
Ja tentei de tudo o que me parecia Lógico, mas até agora não consegui alcançar o resultado esperado.
O mais próximo que consegui foi com a query
SELECT Composicao.IdMaterial, Materiais.descricao, Sum(Estoque.Quantidade) AS SomaDeQuantidade, Sum([VendasProdutos]![Quantidade]*[Composicao]![Quantidade]) AS QuantidadeMaterial
FROM VendasProdutos LEFT JOIN ((Materiais LEFT JOIN Estoque ON Materiais.ID = Estoque.IdMaterial) RIGHT JOIN Composicao ON Materiais.ID = Composicao.IdMaterial) ON VendasProdutos.IdProduto = Composicao.IdProduto
GROUP BY Composicao.IdMaterial, Materiais.descricao;
Porém os valores nos retornos são totalmente maior do que deveria ser.
Como não estou conseguindo resolver o problema. Decidi tratar o retorno da consulta direto no codigo do sistema. Sei que não é o ideal, mas é o que consigo fazer no momento.
Ainda aguardo algum auxilio de vocês aqui.
Obrigado.
Indenta a sql melhor.