Ir para conteúdo

POWERED BY:

Arquivado

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

Anderson Amaral

left join na própria tabela

Recommended Posts

pessoal, bom dia!

 

 

estou com o seguine problema...

 

tenho uma tabela de clientes (sa1010) nela tem os campos normais codigo (a1_cod , loja (a1_loja) e o nome do cliente (a1_nome)alguns clientes possuem um cliente agrupador (a1_codgrp) que é um cliente "responsável" pelo outros...

esse cliente agrupador é um cliente cadastrado na mesma tabela de clientes (sa1010)

 

preciso descobrir o nome desse cliente...lembrando que alguns não possuem esse cliente agrupador...fiz o seguinte select

 

 

SELECT  SA1.A1_LOJA AS LOJA, MIN(SA1.A1_NOME) AS NOME , MIN(SA1.A1_COD) AS CODIGO,
MIN(GRU.A1_NOME) AS AGRUPADO, MIN(GRU.A1_CODGRP) AS COD_AGRUPADOR, 
                     MIN(GRU.A1_LOJGRP) AS LOJA_AGRUPADOR , MIN(GRU.A1_COD)
	FROM   SA1010 AS SA1 
		LEFT OUTER JOIN  SA1010 AS GRU ON (
					SA1.A1_COD = GRU.A1_COD
					AND GRU.D_E_L_E_T_ = ''
					)
	GROUP BY SA1.A1_LOJA

o mais estranho é que paa alguns clientes funcionou e para outros não...

alguém pode me ajudar?

 

 

 

 

Anderson Fernandes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta o seguinte:

 

select sa1.A1_LOJA   as LOJA,
      sa1.A1_NOME   as NOME,
      sa1.A1_COD    as CODIGO,
      sa1.A1_CODGRP as COD_AGRUPADOR,
      gru.A1_NOME   as AGRUPADO,
      gru.A1_LOJGRP as LOJA_AGRUPADOR,
 from SA1010 as sa1
 left join SA1010 AS gru ON (SA1.A1_CODGRP = gru.A1_COD))

Compartilhar este post


Link para o post
Compartilhar em outros sites

então...deu quase certo....

só que repetiu muitas vezes os cadastros...coloquei um distinct mas n rolou...

 

consegui assim

 

select A.A1_COD, A.A1_NOME,A.A1_CODGRP,

(select B.A1_NOME from SA1010 B where B.A1_COD = A.A1_CODGRP and B.A1_LOJA = A.A1_LOJGRP) AS AGRUPADOR

from SA1010 A

Compartilhar este post


Link para o post
Compartilhar em outros sites

então...deu quase certo....

só que repetiu muitas vezes os cadastros...coloquei um distinct mas n rolou...

 

consegui assim

 

select A.A1_COD, A.A1_NOME,A.A1_CODGRP,

(select B.A1_NOME from SA1010 B where B.A1_COD = A.A1_CODGRP and B.A1_LOJA = A.A1_LOJGRP) AS AGRUPADOR

from SA1010 A

Olá Anderson, bom que conseguiu e bom que retornou com a solução, infelizmente muitos não o fazem (o famoso venha a nóis, vosso reino nada...) , isso é muito importante pois pode ajudar outros camaradas do fórum que tenham problemas semelhantes e estamos aqui para ajudar um ao outro.

 

bem vindo ao fórum, visite as regras http://forum.imasters.com.br/index.php?app=core&module=help e sinta-se em casa !

 

 

não conheço sua estrutura, mas talvez assim tb. funcione:

select A.A1_COD, A.A1_NOME,A.A1_CODGRP, B.A1_NOME AS AGRUPADOR
from SA1010 A
left join SA1010 B on B.A1_COD = A.A1_CODGRP and B.A1_LOJA = A.A1_LOJGRP

em geral, junções tem performance melhor que sub-select, mas se não funcionar, a sua solução com sub-select já tá funcionando e sub-select tb. não é o fim do mundo e a diferença em alguns casos é insignificante

 

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca o A1_FILIAL nesta query também.

 

A1_CODGRP e .A1_LOJGRP são customizadas ?!

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.