Fórum Select Remetente e Destinatario mesma tabela #387819

04/10/2010

0

Tenho uma tabela de clientes aonde a mesma é cadastrado emitente e destinatário. Estou tendo dificuldades em trazer os dados em um select. Segue minha instrucao: Tabela clientes CLI_ID CLI_NOME   Tabela movimento MOV_NROLAN MOV_DATLAN MOV_IDREM MOV_IDDES   select lct.MOV_NROLAN, lct.MOV_DATLAN, rem.CLI_NOME, des.CLI_NOME from MOVIMENTO lct inner join CLIENTES rem on rem.CLI_ID = lct.MOV_IDREM inner join CLIENTES des on des.CLI_ID = lct.MOV_IDDES
where (lct.MOV_DATLAN between :p1 and :p2)   O retorno da instrucao acima traz nome iguais para remetente e destinatario.     Desde já agradeço,
Eremita

Eremita

Responder

Posts

04/10/2010

Eduardo Marcolongo

Tente assim:
select lct.MOV_NROLAN, lct.MOV_DATLAN, rem.CLI_NOME, des.CLI_NOME from MOVIMENTO lctinner join CLIENTES rem on rem.CLI_ID = lct.MOV_IDREMinner join CLIENTES des on des.CLI_ID = lct.MOV_IDDES 
where (lct.MOV_DATLAN between :p1 and :p2)

select lct.MOV_NROLAN, lct.MOV_DATLAN, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_idrem) as remetente, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_iddes) as destinatario from MOVIMENTO lctwhere (lct.MOV_DATLAN between :p1 and :p2)
Responder

Gostei + 0

04/10/2010

Wilson Junior

Verifique se os seus campos lct.MOV_IDREM e lct.MOV_IDDES estão com o mesmo valor para o registro.

Espero ter colaborado.
Responder

Gostei + 0

04/10/2010

Eremita

O código abaixo não funcionou select lct.MOV_NROLAN, lct.MOV_DATLAN, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_idrem) as remetente, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_iddes) as destinatario from
MOVIMENTO lct
where (lct.MOV_DATLAN between :p1 and :p2)   Quanto aos dados estarem diferentes dentro da tabela, estão sim
 
Responder

Gostei + 0

04/10/2010

Aroldo Zanela

Verifique se os seus campos lct.MOV_IDREM e lct.MOV_IDDES estão com o mesmo valor para o registro.

Espero ter colaborado.
Colega,   O Paulista tem razão, não há nada errado com seu script. Além de estar de acordo com as boas práticas de não utilizar subquerie como foi sugerido.  
select 
       lct.MOV_NROLAN, 
       lct.MOV_DATLAN, 
       rem.CLI_NOME, 
       des.CLI_NOME 
from 
       MOVIMENTO lct 
inner join 
      CLIENTES rem 
on 
      rem.CLI_ID = lct.MOV_IDREM 
inner join 
      CLIENTES des 
on 
      des.CLI_ID = lct.MOV_IDDES 
where 
      (lct.MOV_DATLAN between :p1 and :p2)
  Testei aqui e funcionou. Se houver problemas, são com os dados.
Responder

Gostei + 0

05/10/2010

Eremita

Realmente não entendi o que estava acontece, como foi dito o script estava correto e as informações na tabela também. Funcionou...   Acho que agora para finalizar a coisa complica um pouco mais ...   Tenho na tabela movimento o campo MOV_IDPAG que se refere a quem será o pagador (remetente ou destinatário) e na tabela CLIENTES COB_ID que se refere ao tipo de cobrança deste pagador. Complemementando o código abaixo preciso trazer a cidade do pagador e a descrição do tipo de cobrança. Minha principal dificuldade é em trazer a descrição da cobrança.   Tabela cobranca COB_ID COB_DESCRICAO   Tabela clientes
CLI_ID
CLI_NOME CLI_CIDADE 
COB_ID  
Tabela movimento
MOV_NROLAN
MOV_DATLAN
MOV_IDREM
MOV_IDDES MOV_IDPAG   #Código select
       lct.MOV_NROLAN,
       lct.MOV_DATLAN,
       rem.CLI_NOME,
       des.CLI_NOME ,        pag.CLI_CIDADE,        cob.COB_DESCRICAO
from
       MOVIMENTO lct
inner join
      CLIENTES rem
on
      rem.CLI_ID = lct.MOV_IDREM
inner join
      CLIENTES des
on
      des.CLI_ID = lct.MOV_IDDES
inner join
      CLIENTES pag
on 
      pag.CLI_IDPAG = lct.MOV_IDPAG where
      (lct.MOV_DATLAN between :p1 and :p2)     Desde já agradeço,
Responder

Gostei + 0

05/10/2010

Eriley Barbosa

Se não vai utilizar left ou rigth join, utilize where e and: select
       lct.MOV_NROLAN,
       lct.MOV_DATLAN,
       rem.CLI_NOME,
       des.CLI_NOME ,        pag.CLI_CIDADE,        cob.COB_DESCRICAO
from
       MOVIMENTO lct, 
      CLIENTES rem ,       CLIENTES des ,
      CLIENTES pag 
where rem.CLI_ID = lct.MOV_IDREM 
and des.CLI_ID = lct.MOV_IDDES 
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID  = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2   Mas se quiser continuar com inner join, tente assim: select
       lct.MOV_NROLAN,
       lct.MOV_DATLAN,
       rem.CLI_NOME,
       des.CLI_NOME ,        pag.CLI_CIDADE,        cob.COB_DESCRICAO
from
       MOVIMENTO lct
inner join
      CLIENTES rem
on
      rem.CLI_ID = lct.MOV_IDREM
inner join
      CLIENTES des
on
      des.CLI_ID = lct.MOV_IDDES
inner join
      CLIENTES pag
on 
      pag.CLI_IDPAG = lct.MOV_IDPAG inner join       COBRANCA cob on       pag.COB_ID  = cob.COB_ID where 
      lct.MOV_DATLAN between :p1 and :p2
Responder

Gostei + 0

05/10/2010

Aroldo Zanela

Colega,   Você criou o alias "pag", mas o mesmo aponta para clientes e deveria apontar para a tabela cobrança.
Responder

Gostei + 0

05/10/2010

Eriley Barbosa

Desculpe faltou a tabela de cobrança no From. Se não vai utilizar left ou rigth join, utilize where e and: select
       lct.MOV_NROLAN,
       lct.MOV_DATLAN,
       rem.CLI_NOME,
       des.CLI_NOME ,        pag.CLI_CIDADE,        cob.COB_DESCRICAO
from
       MOVIMENTO lct, 
      CLIENTES rem ,       CLIENTES des ,
      CLIENTES pag,       COBRANCA cob 
where rem.CLI_ID = lct.MOV_IDREM 
and des.CLI_ID = lct.MOV_IDDES 
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID  = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2   Mas se quiser continuar com inner join, tente assim: select
       lct.MOV_NROLAN,
       lct.MOV_DATLAN,
       rem.CLI_NOME,
       des.CLI_NOME ,        pag.CLI_CIDADE,        cob.COB_DESCRICAO
from
       MOVIMENTO lct
inner join
      CLIENTES rem
on
      rem.CLI_ID = lct.MOV_IDREM
inner join
      CLIENTES des
on
      des.CLI_ID = lct.MOV_IDDES
inner join
      CLIENTES pag
on 
      pag.CLI_IDPAG = lct.MOV_IDPAG inner join       COBRANCA cob on       pag.COB_ID  = cob.COB_ID where 
      lct.MOV_DATLAN between :p1 and :p2
 
Responder

Gostei + 0

05/10/2010

Eremita

Então ... na tabela MOVIMENTO tenho o MOV_IDPAG que determina quem é o pagador, na tabela CLIENTE tenho o CLI_IDCOB que determina o codigo do tipo de pagamento e na tabela COBRANCA aonde terei a descricao. Não sei como traduzir isto no script.  
Responder

Gostei + 0

05/10/2010

Eriley Barbosa

Testou os scripts que te passei?
Responder

Gostei + 0

05/10/2010

Eremita

Beleza, agradeço a todos pela força.
Responder

Gostei + 0

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

Aceitar