Ir para conteúdo

Arquivado

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

Ewerton Batista

[Resolvido] Selecionar Primeiro Registro (Inner Join)

Recommended Posts

Boa Tarde Pessoal,

estou com o seguinte problema:

 

estou executando a seguinte consulta SQL:

 

Select
 NOTAFISCAL.NFSNUM As NumeroNF,
 ITEM_NOTA_FISCAL.INFSEQ As Sequencia,
 ITEM_NOTA_FISCAL.NFSCTR As NumeroControle,
 ITEM_NOTA_FISCAL.PROCOD As CodProduto,
 PRODUTO.PRODES As Produto,
 ITEM_NOTA_FISCAL.TRBID As Tributacao,
 ITEM_NOTA_FISCAL.CFOCOD As CFOP,
 ITEM_NOTA_FISCAL.INFUND As Unidade,
 ITEM_NOTA_FISCAL.INFQTDEMB As Quantidade,
 ITEM_NOTA_FISCAL.INFVLREMB As ValorUnitario,
 ITEM_NOTA_FISCAL.INFVLRDCN As Desconto,
 ITEM_NOTA_FISCAL.INFALQ As Aliquota,
 ITEM_NOTA_FISCAL.INFPERRED As Reducao,
 ITEM_NOTA_FISCAL.INFVLRIMP As Imposto,
 (ITEM_NOTA_FISCAL.INFQTDEMB * ITEM_NOTA_FISCAL.INFVLREMB) As Total,
 ITEM_NOTA_FISCAL.INFTABB As CST,
 PRODUTOAUX.PROCODAUX,
 PRODUTO.PRONCM,
 TRIBUTACAO.TRBTABB,
 PRODUTO.PROTABA
From
 ITEM_NOTA_FISCAL Left Join
 NOTAFISCAL On ITEM_NOTA_FISCAL.NFSCTR = NOTAFISCAL.NFSCTR Left Join
 PRODUTO On ITEM_NOTA_FISCAL.PROCOD = PRODUTO.PROCOD Left Join
 PRODUTOAUX On PRODUTO.PROCOD = PRODUTOAUX.PROCOD Inner Join
 TRIBUTACAO On PRODUTO.TRBID = TRIBUTACAO.TRBID
Where
 NOTAFISCAL.NFSNUM = 0000000004

 

na tabela PRODUTOAUX fica os codigos de barras dos produtos sendo que um produto pode ter varios codigos de barras, e eu preciso executar o SQL acima trazendo somente um código de barra do produto, porque acontece o seguinte se um produto tiver mais de um codigo de barras vai repetir a linha de acordo com quantos codigo de barras tiver, igual a este exemplo:

 

06d9e87496.gif

 

repare que onde está marcado de verde é o mesmo produto e oque está marcado de amarelo são os codigos de barras (código de barras diferentes).

 

como eu poderia fazer esta mesma consulta que estou fazendo porém trazendo um código de barras só, por exemplo o primeiro, para não repetir o produto na consulta.

 

desde já agradeço atenção, Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ewerton!

 

Voce pode retirar da selecao essa tabela PRODUTOAUX e adicionar um subselect na sua consulta. É uma solução meio lenta, mais de imediato, foi o q eu consegui pensar

 

Select
 NOTAFISCAL.NFSNUM As NumeroNF,
 ITEM_NOTA_FISCAL.INFSEQ As Sequencia,
 ITEM_NOTA_FISCAL.NFSCTR As NumeroControle,
 ITEM_NOTA_FISCAL.PROCOD As CodProduto,
 PRODUTO.PRODES As Produto,
 ITEM_NOTA_FISCAL.TRBID As Tributacao,
 ITEM_NOTA_FISCAL.CFOCOD As CFOP,
 ITEM_NOTA_FISCAL.INFUND As Unidade,
 ITEM_NOTA_FISCAL.INFQTDEMB As Quantidade,
 ITEM_NOTA_FISCAL.INFVLREMB As ValorUnitario,
 ITEM_NOTA_FISCAL.INFVLRDCN As Desconto,
 ITEM_NOTA_FISCAL.INFALQ As Aliquota,
 ITEM_NOTA_FISCAL.INFPERRED As Reducao,
 ITEM_NOTA_FISCAL.INFVLRIMP As Imposto,
 (ITEM_NOTA_FISCAL.INFQTDEMB * ITEM_NOTA_FISCAL.INFVLREMB) As Total,
 ITEM_NOTA_FISCAL.INFTABB As CST,
 PRODUTO.PRONCM,
 TRIBUTACAO.TRBTABB,
 PRODUTO.PROTABA,
 (SELECT FIRST  1 PA.PROCODAUX FROM PRODUTOAUX PA WHERE PA.PRODCOD = PRODUTO.PROCOD) as PROCODAUX
From
 ITEM_NOTA_FISCAL Left Join
 NOTAFISCAL On ITEM_NOTA_FISCAL.NFSCTR = NOTAFISCAL.NFSCTR Left Join
 PRODUTO On ITEM_NOTA_FISCAL.PROCOD = PRODUTO.PROCOD Inner Join
 TRIBUTACAO On PRODUTO.TRBID = TRIBUTACAO.TRBID
Where
 NOTAFISCAL.NFSNUM = 0000000004

 

Acabei de pensar de um outro jeito. Voce pode utilizar o MAX ou MIN.

 

Select
 NOTAFISCAL.NFSNUM As NumeroNF,
 ITEM_NOTA_FISCAL.INFSEQ As Sequencia,
 ITEM_NOTA_FISCAL.NFSCTR As NumeroControle,
 ITEM_NOTA_FISCAL.PROCOD As CodProduto,
 PRODUTO.PRODES As Produto,
 ITEM_NOTA_FISCAL.TRBID As Tributacao,
 ITEM_NOTA_FISCAL.CFOCOD As CFOP,
 ITEM_NOTA_FISCAL.INFUND As Unidade,
 ITEM_NOTA_FISCAL.INFQTDEMB As Quantidade,
 ITEM_NOTA_FISCAL.INFVLREMB As ValorUnitario,
 ITEM_NOTA_FISCAL.INFVLRDCN As Desconto,
 ITEM_NOTA_FISCAL.INFALQ As Aliquota,
 ITEM_NOTA_FISCAL.INFPERRED As Reducao,
 ITEM_NOTA_FISCAL.INFVLRIMP As Imposto,
 (ITEM_NOTA_FISCAL.INFQTDEMB * ITEM_NOTA_FISCAL.INFVLREMB) As Total,
 ITEM_NOTA_FISCAL.INFTABB As CST,
 Max(PRODUTOAUX.PROCODAUX) As PROCODAUX,
 PRODUTO.PRONCM,
 TRIBUTACAO.TRBTABB,
 PRODUTO.PROTABA
From
 ITEM_NOTA_FISCAL Left Join
 NOTAFISCAL On ITEM_NOTA_FISCAL.NFSCTR = NOTAFISCAL.NFSCTR Left Join
 PRODUTO On ITEM_NOTA_FISCAL.PROCOD = PRODUTO.PROCOD Left Join
 PRODUTOAUX On PRODUTO.PROCOD = PRODUTOAUX.PROCOD Inner Join
 TRIBUTACAO On PRODUTO.TRBID = TRIBUTACAO.TRBID
Where
 NOTAFISCAL.NFSNUM = 0000000004
Group by
 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19

 

 

Outra coisa que reparei no seu SELECT q eu alteraria são os "left". Nã sei como esta exatamente sua estrutura no banco, mas na teoria, toda item de nota fiscal tem um nota, e toda item é um produto. Caso minha lógica esteja de acordo com a da sua estrutura, utiliza sempre inner para melhorar seu desempenho!

 

 

Espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Laura, muito obrigado pela ajuda! usei a subconsulta e funcionou perfeitamente!

 

Obrigado pela dica do left join tambem! concordo com sua lógica, e vai funcionar melhor e como deve no meu banco sim!

 

Agradecido, Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por nada! Estou aqui pra ajudar também! Realize os testes com o MAX tambem, acredito que ele tenha um melhor desempenho.

 

Otimo que deu certo!!

=)

 

Abraço!!!!

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.