Junçao de dois Codigos em SQL
Preciso fazer a junção desses dois codigo de vendas e compras pelo tipo de modelo, quando junto os dois, começa a
dar erro nos valores de estoque, mas quando faço separadamente ele dar o resultado certinho,
tem alguem aí poderia me ajudar a juntar esses dois codigo sem que dê problema no valores.
SELECT ESTOQUE.CODIGO,
ESTOQUE.NOME,
SUM(ITECOMPRAS.QTD) AS COMPRAS,
COMPRAS.MODELO
FROM ESTOQUE,ITECOMPRAS,COMPRAS
WHERE ESTOQUE.CODIGO=ITECOMPRAS.CODIGO AND
ITECOMPRAS.NOTA=COMPRAS.NOTA AND
COMPRAS.MODELO='01'
GROUP BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO
SELECT ITEVENDAS.CODIGO,
SUM(ITEVENDAS.QTD) QTD_VENDA,
ESTOQUE.NOME
FROM ITEVENDAS,ESTOQUE
WHERE ITEVENDAS.CODIGO=ESTOQUE.CODIGO AND
ITEVENDAS.MODELO='01'
GROUP BY ITEVENDAS.CODIGO,
ESTOQUE.NOME
dar erro nos valores de estoque, mas quando faço separadamente ele dar o resultado certinho,
tem alguem aí poderia me ajudar a juntar esses dois codigo sem que dê problema no valores.
SELECT ESTOQUE.CODIGO,
ESTOQUE.NOME,
SUM(ITECOMPRAS.QTD) AS COMPRAS,
COMPRAS.MODELO
FROM ESTOQUE,ITECOMPRAS,COMPRAS
WHERE ESTOQUE.CODIGO=ITECOMPRAS.CODIGO AND
ITECOMPRAS.NOTA=COMPRAS.NOTA AND
COMPRAS.MODELO='01'
GROUP BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO
SELECT ITEVENDAS.CODIGO,
SUM(ITEVENDAS.QTD) QTD_VENDA,
ESTOQUE.NOME
FROM ITEVENDAS,ESTOQUE
WHERE ITEVENDAS.CODIGO=ESTOQUE.CODIGO AND
ITEVENDAS.MODELO='01'
GROUP BY ITEVENDAS.CODIGO,
ESTOQUE.NOME
Tiago Rodrigues
Curtidas 0
Respostas
Wander Santos
21/10/2014
Utiliza o union no final o primeiro select
select ......
union
select...
select ......
union
select...
GOSTEI 0
Tiago Rodrigues
21/10/2014
Ja tentei amigo, nao deu certo.
GOSTEI 0
Wander Santos
21/10/2014
Roda as querys separadas e ve se da algum erro.
Pq com o Union era pra da certo
Pq com o Union era pra da certo
GOSTEI 0
Marisiana Battistella
21/10/2014
Testa esse SELECT pra ver se funciona:
Acredito q o motivo pelo qual retorna dados errado é que no segundo vc inclui o ITEVENDAS.CODIGO e no primeiro o ESTOQUE.CODIGO isso, logicamente, faz agrupamentos de dados diferentes e por isso os resultados são diferentes.
SELECT ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO AS MODELOVENDA,
ITEVENDAS.MODELO AS MODELOCOMPRA,
SUM(ITECOMPRAS.QTD) AS COMPRAS,
SUM(ITEVENDAS.QTD) AS QTD_VENDA
FROM ESTOQUE
INNER JOIN ITECOMPRAS
ON ESTOQUE.CODIGO =ITECOMPRAS.CODIGO
INNER JOIN COMPRAS
ON ITECOMPRAS.NOTA=COMPRAS.NOTA
INNER JOIN ITEVENDAS
ON ESTOQUE.CODIGO = ITEVENDAS.CODIGO
WHERE COMPRAS.MODELO='01'
AND ITEVENDAS.MODELO='01'
GROUP BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO,
ITEVENDAS.MODELO
ORDER BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO,
ITEVENDAS.MODELO
Acredito q o motivo pelo qual retorna dados errado é que no segundo vc inclui o ITEVENDAS.CODIGO e no primeiro o ESTOQUE.CODIGO isso, logicamente, faz agrupamentos de dados diferentes e por isso os resultados são diferentes.
GOSTEI 0
Tiago Rodrigues
21/10/2014
Marisiana, Ocorreu a mesma coisa que aconteceu quando fiz a junção dos condigo, a forma foi diferente, mas
a logica foi a mesma, olha o que aconteceu tanto no meu codigo quanto o seu.
Exemplo: Dei uma entrada de nota do Produto A de 50 quantidades e fiz uma venda do mesmo de 2. Depois outra
entrada de mais 30 produtos A no estoque, automaticamente ele duplica o total de venda para 4, ou seja, sempre
que dou uma entrada, o valor da venda sempre duplica...Outra coisa que acontece tambem, so vai aparecer no meu
relatorio se pelo menos tiver uma compra ou uma venda para o mesmo produto, se tiver so uma compra ou so uma
venda, ele nao aparece.
Obrigado a todos !!
a logica foi a mesma, olha o que aconteceu tanto no meu codigo quanto o seu.
Exemplo: Dei uma entrada de nota do Produto A de 50 quantidades e fiz uma venda do mesmo de 2. Depois outra
entrada de mais 30 produtos A no estoque, automaticamente ele duplica o total de venda para 4, ou seja, sempre
que dou uma entrada, o valor da venda sempre duplica...Outra coisa que acontece tambem, so vai aparecer no meu
relatorio se pelo menos tiver uma compra ou uma venda para o mesmo produto, se tiver so uma compra ou so uma
venda, ele nao aparece.
Obrigado a todos !!
GOSTEI 0
Tiago Rodrigues
21/10/2014
Roda as querys separadas e ve se da algum erro.
Pq com o Union era pra da certo
Pq com o Union era pra da certo
Ele separado roda sem nenhum problema.
Obrigado !!!
GOSTEI 0
Tiago Rodrigues
21/10/2014
Testa esse SELECT pra ver se funciona:
Acredito q o motivo pelo qual retorna dados errado é que no segundo vc inclui o ITEVENDAS.CODIGO e no primeiro o ESTOQUE.CODIGO isso, logicamente, faz agrupamentos de dados diferentes e por isso os resultados são diferentes.
SELECT ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO AS MODELOVENDA,
ITEVENDAS.MODELO AS MODELOCOMPRA,
SUM(ITECOMPRAS.QTD) AS COMPRAS,
SUM(ITEVENDAS.QTD) AS QTD_VENDA
FROM ESTOQUE
INNER JOIN ITECOMPRAS
ON ESTOQUE.CODIGO =ITECOMPRAS.CODIGO
INNER JOIN COMPRAS
ON ITECOMPRAS.NOTA=COMPRAS.NOTA
INNER JOIN ITEVENDAS
ON ESTOQUE.CODIGO = ITEVENDAS.CODIGO
WHERE COMPRAS.MODELO='01'
AND ITEVENDAS.MODELO='01'
GROUP BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO,
ITEVENDAS.MODELO
ORDER BY ESTOQUE.CODIGO,
ESTOQUE.NOME,
COMPRAS.MODELO,
ITEVENDAS.MODELO
Acredito q o motivo pelo qual retorna dados errado é que no segundo vc inclui o ITEVENDAS.CODIGO e no primeiro o ESTOQUE.CODIGO isso, logicamente, faz agrupamentos de dados diferentes e por isso os resultados são diferentes.
Marisiana, Ocorreu a mesma coisa que aconteceu quando fiz a junção dos condigo, a forma foi diferente, mas
a logica foi a mesma, olha o que aconteceu tanto no meu codigo quanto o seu.
Exemplo: Dei uma entrada de nota do Produto A de 50 quantidades e fiz uma venda do mesmo de 2. Depois outra
entrada de mais 30 produtos A no estoque, automaticamente ele duplica o total de venda para 4, ou seja, sempre
que dou uma entrada, o valor da venda sempre duplica...Outra coisa que acontece tambem, so vai aparecer no meu
relatorio se pelo menos tiver uma compra ou uma venda para o mesmo produto, se tiver so uma compra ou so uma
venda, ele nao aparece.
Obrigado a todos !!
GOSTEI 0
Marisiana Battistella
21/10/2014
Eu acho que está faltando incluir algum JOIN nesse SQL... Talvez tenha que utilizar a tabela VENDAS ...
GOSTEI 0
Marisiana Battistella
21/10/2014
Imagino que algumas dessas tabelas referencie PRODUTO ou então tenha mais alguma chave que faz ligação com a tabela de estoque...
GOSTEI 0
David Sylvestre
21/10/2014
Os dois selects não possuem o mesmo numero de colunas.
GOSTEI 0
Tiago Rodrigues
21/10/2014
Os dois selects não possuem o mesmo numero de colunas.
Nao entendi muito bem o que vc quis dizer, teria como tu explicar
como seria essas quantidade de colunas...Obriagado!!!
GOSTEI 0
Tiago Rodrigues
21/10/2014
Imagino que algumas dessas tabelas referencie PRODUTO ou então tenha mais alguma chave que faz ligação com a tabela de estoque...
Tambem estou achando que seja algo relacionado a isso, so que nao
consegui vê qual seria essa ligação Marisiana.
GOSTEI 0
Marisiana Battistella
21/10/2014
No primeiro select vc utilizou os campos
no segundo select
O retorno do SQL varia conforme as colunas que vc inclui, tabelas que vc referencia e das junções que vc faz entres elas e da ordem do agrupamento (GROUP BY)
Você tem que observar que está fazendo dois selects com uma regra que não está tão igual assim.
No exemplo que te passei uni os dois selects para obter um resultado mais correto possível. Agora vc tem q verificar qual é a regra que esse select tem q atender, se são necessários incluir aqueles filtros na cláusula WHERE, de quais campos e quais tabelas você terá que vincular para buscar as informações corretas.
ESTOQUE.CODIGO, ESTOQUE.NOME, SUM(ITECOMPRAS.QTD) AS COMPRAS, COMPRAS.MODELO
no segundo select
ITEVENDAS.CODIGO, SUM(ITEVENDAS.QTD) QTD_VENDA, ESTOQUE.NOME
O retorno do SQL varia conforme as colunas que vc inclui, tabelas que vc referencia e das junções que vc faz entres elas e da ordem do agrupamento (GROUP BY)
Você tem que observar que está fazendo dois selects com uma regra que não está tão igual assim.
No exemplo que te passei uni os dois selects para obter um resultado mais correto possível. Agora vc tem q verificar qual é a regra que esse select tem q atender, se são necessários incluir aqueles filtros na cláusula WHERE, de quais campos e quais tabelas você terá que vincular para buscar as informações corretas.
GOSTEI 0
David Sylvestre
21/10/2014
Nao entendi muito bem o que vc quis dizer, teria como tu explicar
como seria essas quantidade de colunas...Obriagado!!!
como seria essas quantidade de colunas...Obriagado!!!
"Para utilizar o UNION, o número e a ordem das colunas precisam ser idênticos em todas as queries e os data types precisam ser compatíveis."
Read more: http://www.linhadecodigo.com.br/artigo/945/sql-utilizando-o-operador-union-e-union-all.aspx#ixzz3GsdPytPg
GOSTEI 0
Marisiana Battistella
21/10/2014
As informações se detalham conforme as colunas que vc inclui no select e conforme o agrupamento que você define.
Se vc incluir apenas
As informações serão totalizadas respeitando o foi definido na clausula WHERE.
Se você incluir
você está pedindo que some os itens de compra e venda por NOME e por CÓDIGO, dessa forma, você terá que incluir esses dois campos no GROUP BY para que o cálculo seja realizado.
Se vc incluir apenas
SUM(ITECOMPRAS.QTD) AS COMPRAS, SUM(ITEVENDAS.QTD) QTD_VENDA,
As informações serão totalizadas respeitando o foi definido na clausula WHERE.
Se você incluir
ESTOQUE.CODIGO, ESTOQUE.NOME, SUM(ITECOMPRAS.QTD) AS COMPRAS, SUM(ITEVENDAS.QTD) QTD_VENDA
você está pedindo que some os itens de compra e venda por NOME e por CÓDIGO, dessa forma, você terá que incluir esses dois campos no GROUP BY para que o cálculo seja realizado.
GOSTEI 0
Marisiana Battistella
21/10/2014
Tiago, conseguiu alterar o SQL?
GOSTEI 0
Tiago Rodrigues
21/10/2014
Tiago, conseguiu alterar o SQL?
Marisiana, Tentei fazer o codigo sem usar o UNION, fazendo
os vínculos tudo dentro da WHERE, mas tambem nao deu certo. To
baixando alguns materiais para dar mais um estudada sobre isso
para vê se consigo resolver.
GOSTEI 0
Marisiana Battistella
21/10/2014
Você já tinha utilizado o padrão ANSI ? ( inner join, left join, right join)
GOSTEI 0
Tiago Rodrigues
21/10/2014
Você já tinha utilizado o padrão ANSI ? ( inner join, left join, right join)
Nao. Vou começar trabalhar com eles agora, paguei um material aqui pra
vê se consigo fazer a junção.
GOSTEI 0
Marisiana Battistella
21/10/2014
Certo!
Esses dois artigos podem te auxiliar:
Oracle Database: Entendendo o conceito de Join e Outer Join
[url:descricao=Cláusulas INNER JOIN, LEFT JOIN e RIGHT JOIN - Associação de Tabelas: SQL Server 2008 - Parte]https://www.devmedia.com.br/clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas-sql-server-2008-parte-2/18930[/url]
Esses dois artigos podem te auxiliar:
Oracle Database: Entendendo o conceito de Join e Outer Join
[url:descricao=Cláusulas INNER JOIN, LEFT JOIN e RIGHT JOIN - Associação de Tabelas: SQL Server 2008 - Parte]https://www.devmedia.com.br/clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas-sql-server-2008-parte-2/18930[/url]
GOSTEI 0