Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JJunior

SQL - Relacionamento entre tabelas

Recommended Posts

Caros amigos, boa tarde!Necessito buscar dados entre duas tabelas e efetuar alguns calculos entre alguns campos, onde tenho na tabela "CONT_SAIDA" a estrutura: Tabela "CONT_SAIDA"COD_FORN | NroCORTE | CODPROD | DATA_SAIDA | NF_SAIDA | QTD_SAIDA 109 | 315 | 123456 | 01/01/2007 | 554433 | 555Já na segunda tabela (CONT_ENTRADA) tenho a seguinte estrutura:Tabela "CONT_ENTRADA" NroCORTE | COD_FORN | DATA_ENTRADA | NF_ENTRADA | QTD_ENTRADA 315 | 109 | 10/01/2007 | 998877 | 100 315 | 109 | 15/01/2007 | 998889 | 110 Estou procedendo da seguinte maneira, com a minha instrução SQL:SELECT SUM(A.QTD_SAIDA)AS SAIDAS, {totalizar as saídas} SUM(QTD_ENTRADA)AS ENTRADAS, {totalizar as entradas} SUM(QTD_SAIDA - QTD_ENTRADA)AS SALDO {calcular a o Saldo restante} COUNT(B.NF_ENTRADA)AS NOTAS, {contar a quantidade de entregas efetuadas} FROM CONT_SAIDA A, CONT_ENTRADA B WHERE A.NroCORTE = :CORTE and A.NroCORTE = B.NroCORTE Como resultado, esta me retornando 1110 peças de saída, ao invés de 555 peças conforme tabela de saída. Pergunta:1) Onde estou pecando?Obs: Já coloquei a clausula "DISTINCT" e nada.Ps: - Estou voltando a programar em Delphi e a utilizar Instruções SQL. - As tabelas são Paradox.Quem puder me dar uma luz, ficarei imensamente grato.Um grande abraço a todos e um execelente 2007José de Moura

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Cara, seguinte, não entendi muito bem a estrutura das suas tabelas e nem o relacionamento que fez? A tabela que mostrou em cima é a estrutura real ou uma consulta tbm?Carlos Edu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Cara, seguinte, não entendi muito bem a estrutura das suas tabelas e nem o relacionamento que fez? A tabela que mostrou em cima é a estrutura real ou uma consulta tbm?Carlos Edu

Carlos, boa tarde!É a estrutura real das tabelas sendo a primeira linha os campos e a segunda linha os valores contidos em cada um deles(os valores estão separados por um traço vertical " | " ).Busco fazer a relação entre elas pelo campo NroCorte, sendo A.NroCorte (referencia ao campo na tabela de Saidas) e B.NroCorte(referencia ao campo na tabela de Entradas).Grande abraço e obrigado pelo interesse.José

Compartilhar este post


Link para o post
Compartilhar em outros sites

Confuso até o Talo, mas beleza...ta faltando o Group By ai, não tá não?eu acho que tá sim em!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Tudo bem Hugo?Acrescendo o GROUP BY o retorno é:Quantidade de Saidas = 555 - OKmas A Quantidade de Entradas fica = 100 {erro}, na realidade são 210 peçase O Saldo fica = 455 {erro}, na realidade são 345 peçasAbraços e muito obrigado.José

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você sempre vai ter uma SAIDA para várias ENTRADAS ?

O SQL gera os valores divergentes visto que ele multiplica o n° de saidas pelo n° de entradas, se tentar o SQL assim:

 

SELECT A.NroCORTE, A.QTD_SAIDA AS SAIDAS, SUM(QTD_ENTRADA) AS ENTRADAS,(QTD_SAIDA - SUM(QTD_ENTRADA)) AS SALDO, COUNT(B.NF_ENTRADA) AS NOTASFROM CONT_SAIDA A, CONT_ENTRADA BWHERE A.NroCORTE = :CORTEand A.NroCORTE = B.NroCORTEgroup by A.NroCORTE, A.QTD_SAIDA

Vai gerar o valor que deseja, mas no caso se tiver mais de um item de SAIDA, irá precisar fazer sub-selects para funcionar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, criei as suas tabelas e simulei em casa, realmente com o Piradox fica meo difícil mandar uma instrução SQL que venha a suprir a sua necessidade, no caso acho que:

 

Ou você faz como o Márcio falou...

 

ou bola alguma rotina para calcular....

 

 

flw!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você sempre vai ter uma SAIDA para várias ENTRADAS ?O SQL gera os valores divergentes visto que ele multiplica o n° de saidas pelo n° de entradas, se tentar o SQL assim:

SELECT A.NroCORTE, A.QTD_SAIDA AS SAIDAS, SUM(QTD_ENTRADA) AS ENTRADAS,(QTD_SAIDA - SUM(QTD_ENTRADA)) AS SALDO, COUNT(B.NF_ENTRADA) AS NOTASFROM CONT_SAIDA A, CONT_ENTRADA BWHERE A.NroCORTE = :CORTEand A.NroCORTE = B.NroCORTEgroup by A.NroCORTE, A.QTD_SAIDA
Vai gerar o valor que deseja, mas no caso se tiver mais de um item de SAIDA, irá precisar fazer sub-selects para funcionar...
Marcio, bom dia!Muito obrigado, pela explanação. Realmente da certinho.Cara, por favor:Você comentou que, se houver mais de um item na saida eu deveria fazer sub-selects, certo?Vamos ver se entendi:No exemplo acima nos demos saida em um unico item (produto), já com a sua colocação será se nos tivermos dois ou mais itens(produtos) na saida?Pois bem eu nunca empreguei sub-select, como ficaria uma consulta empregando-a.Mais uma vez, Muito obrigado.Grande abraçoJosé

Tenho quase certeza que SubSelect ele não aceita, mas faz tempo que não uso...vale a tentativa!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Hugo, muito obrigado!Valeu garoto.Grande abraço.José

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.