Fórum Junçao de dois Codigos em SQL #498570

21/10/2014

0

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
Tiago Rodrigues

Tiago Rodrigues

Responder

Posts

21/10/2014

Wander Santos

Utiliza o union no final o primeiro select


select ......

union

select...
Responder

Gostei + 0

21/10/2014

Tiago Rodrigues

Ja tentei amigo, nao deu certo.
Responder

Gostei + 0

21/10/2014

Wander Santos

Roda as querys separadas e ve se da algum erro.
Pq com o Union era pra da certo
Responder

Gostei + 0

21/10/2014

Marisiana Battistella

Testa esse SELECT pra ver se funciona:
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.
Responder

Gostei + 0

21/10/2014

Tiago Rodrigues

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 !!
Responder

Gostei + 0

21/10/2014

Tiago Rodrigues

Roda as querys separadas e ve se da algum erro.
Pq com o Union era pra da certo


Ele separado roda sem nenhum problema.

Obrigado !!!
Responder

Gostei + 0

21/10/2014

Tiago Rodrigues

Testa esse SELECT pra ver se funciona:
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 !!
Responder

Gostei + 0

22/10/2014

Marisiana Battistella

Eu acho que está faltando incluir algum JOIN nesse SQL... Talvez tenha que utilizar a tabela VENDAS ...
Responder

Gostei + 0

22/10/2014

Marisiana Battistella

Imagino que algumas dessas tabelas referencie PRODUTO ou então tenha mais alguma chave que faz ligação com a tabela de estoque...
Responder

Gostei + 0

22/10/2014

David Sylvestre

Os dois selects não possuem o mesmo numero de colunas.
Responder

Gostei + 0

22/10/2014

Tiago Rodrigues

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!!!
Responder

Gostei + 0

22/10/2014

Tiago Rodrigues

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.
Responder

Gostei + 0

22/10/2014

Marisiana Battistella

No primeiro select vc utilizou os campos
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.
Responder

Gostei + 0

22/10/2014

David Sylvestre

Nao entendi muito bem o que vc quis dizer, teria como tu explicar
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
Responder

Gostei + 0

22/10/2014

Marisiana Battistella

As informações se detalham conforme as colunas que vc inclui no select e conforme o agrupamento que você define.
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.
Responder

Gostei + 0

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

Aceitar