Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Somar Qtd de Venda + Troca_Saida de Produtos Por Clientes


Question

Boa tarde pessoal. Mas uma vez preciso de uma ajuda...Estou tentando desde segunda-feira, sei que é possível mas não estou conseguindo. A dúvida é bem parecida com meu primeiro tópico "(Resolvido) Somar e Subtrair", mas mesmo assim não consegui resolver, pois acho que tem algum detalhe a mais e não acho o erro.

Nesse caso preciso somar todas as vendas com todas as trocas_saidas, e apresentar o resultado agrupando os produtos por nome e filtrando por cliente.

Consegui fazer duas consultas, agora preciso junta-las. Veja meu código e o resultado que está aparecendo.

SELECT V.idClienteFornecedor, VS.idProduto, SUM(VS.quantidadeItem) AS S
FROM PedidoVendaItens VS, PedidoVenda V
WHERE VS.idPedidoVenda=V.idPedidoVenda
GROUP BY V.idClienteFornecedor, VS.idProduto
ORDER BY V.idClienteFornecedor, VS.idProduto
SELECT T.idClienteFornecedor, TS.idProduto, SUM(TS.quantidadeItem) AS TS
FROM TrocaMercadoriaSaida TS, TrocaMercadoria T
WHERE TS.idTrocaMercadoria=T.idTrocaMercadoria
GROUP BY T.idClienteFornecedor, TS.idProduto
ORDER BY T.idClienteFornecedor, TS.idProduto
Este é o código que eu estou tentando juntar os dois resultados, mas ele está duplicando a quantidade de campos, e apresentando valores errados.
SELECT C.idClienteFornecedor, P.idProduto, SUM(VS.quantidadeItem) AS V, SUM(TS.quantidadeItem) AS TS
FROM ClienteFornecedor C
FULL JOIN PedidoVenda V
ON V.idClienteFornecedor=C.idClienteFornecedor
FULL JOIN PedidoVendaItens VS
ON VS.idPedidoVenda=V.idPedidoVenda
FULL JOIN TrocaMercadoria T
ON T.idClienteFornecedor=C.idClienteFornecedor
FULL JOIN TrocaMercadoriaSaida TS
ON TS.idTrocaMercadoria=T.idTrocaMercadoria
INNER JOIN Produto P
ON VS.idProduto=P.idProduto OR TS.idProduto=P.idProduto
GROUP BY C.idClienteFornecedor, P.idProduto
ORDER BY C.idClienteFornecedor, P.idProduto

sb15426101.jpg

Edited by Braulio Ribeiro
Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Bom dia Braulio,

Foi no seu post que coloquei uma obs sobre o SUM... rs:

"Outra coisa importante que dá um trabalho feio: quando se utiliza o Left/right Join, os relacionamento vão se exponencializando... ao utilizar a função SUM, torna-se muito dificil ter uma soma "adequada". Uma dica interessante é utilizar o SUM mais simples possível."

O seu agrupamento está sendo duplicado por causa da coluna IdProduto. Os ID´s devem ser iguais para que o sql agrupe as informações. Caso sejam diferentes (no seu caso deve ser chave), não haverá agrupamento.

Tente fazer uma soma simples. De preferância com apenas a coluna que deseja somar. Depois que o resultado der certo, vá implementando os demais campos.

Link to post
Share on other sites
  • 0

Ola Fulvio, consegui. Obrigado pela dica.

Estou estudando os comandos SQL, provavelmente precisarei de mais dicas.

Solução do problema:

SELECT C.idClienteFornecedor, C.nomeClienteFornecedor, P.idProduto, P.descricaoProduto,
(SELECT SUM(VS.quantidadeItem) FROM PedidoVendaItens VS, PedidoVenda V WHERE VS.idProduto=P.idProduto AND VS.idPedidoVenda=V.idPedidoVenda AND V.idClienteFornecedor=C.idClienteFornecedor) AS VS,
(SELECT SUM(DE.quantidadeItem) FROM DevolucaoItens DE, Devolucao D WHERE DE.idProduto=P.idProduto AND DE.idDevolucao=D.idDevolucao AND D.idClienteFornecedor=C.idClienteFornecedor) AS DE,
(SELECT SUM(TS.quantidadeItem) FROM TrocaMercadoriaSaida TS, TrocaMercadoria T WHERE TS.idProduto=P.idProduto AND TS.idTrocaMercadoria=T.idTrocaMercadoria AND T.idClienteFornecedor=C.idClienteFornecedor) AS TS,
(SELECT SUM(TE.quantidadeItem) FROM TrocaMercadoriaEntrada TE, TrocaMercadoria T WHERE TE.idProduto=P.idProduto AND TE.idTrocaMercadoria=T.idTrocaMercadoria AND T.idClienteFornecedor=C.idClienteFornecedor) AS TE
FROM ClienteFornecedor C
FULL JOIN PedidoVenda V
ON V.idClienteFornecedor=C.idClienteFornecedor
FULL JOIN PedidoVendaItens VS
ON VS.idPedidoVenda=V.idPedidoVenda
FULL JOIN Devolucao D
ON D.idClienteFornecedor=C.idClienteFornecedor
FULL JOIN DevolucaoItens DE
ON DE.idDevolucao=D.idDevolucao
FULL JOIN TrocaMercadoria T
ON T.idClienteFornecedor=C.idClienteFornecedor
FULL JOIN TrocaMercadoriaSaida TS
ON TS.idTrocaMercadoria=T.idTrocaMercadoria
FULL JOIN TrocaMercadoriaEntrada TE
ON TE.idTrocaMercadoria=T.idTrocaMercadoria
INNER JOIN Produto P
ON VS.idProduto=P.idProduto OR DE.idProduto=P.idProduto OR TS.idProduto=P.idProduto OR TE.idProduto=P.idProduto
GROUP BY P.idProduto, P.descricaoProduto, C.idClienteFornecedor, nomeClienteFornecedor
ORDER BY P.descricaoProduto

sb15426102.jpg

Edited by Braulio Ribeiro
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      149279
    • Total Posts
      645643
×
×
  • Create New...