Ir para conteúdo

POWERED BY:

Arquivado

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

c@che br@sil

Putz, como construo este select?

Recommended Posts

Olá pessoal,

 

Putz, como eu poderia criar um select que daria este efeito:

 

Tabela de Empresa

Tabela de Telefones

Tabela de Contatos

 

Desejado:

nome	tel	contato
EmpA	555	Joao
EmpA	666	Jose
EmpA	777	<null>

Neste caso a Empresa A tem 4 telefones e 2 contatos.

 

Atualmente Vindo

nome	tel	contato
EmpA	555	Joao
EmpA	555	Jose
EmpA	666	Joao
EmpA	666	Jose
EmpA	777	Joao
EmpA	777	Jose

Eu precisaria que faria algo assim:

-> Liste todos os telefones da empresa, ok

-> Liste os contatos, mas se ja listou todos, não liste de novo, venha vazio... null

 

-> Estou usando left join...

-> Então para sumir esta "duplicação", usando o distinct resolve?

(visto proximos posts não seria...)

-> Obrigado a todos

 

-> Select atual +- isso

SELECT cf.codigo, CF.RAZSOC AS RazaoSocial,
       F.NUMTEL AS Telefone,
       C.NOMCON AS Contato
      --...
FROM CLIFOR CF
LEFT JOIN TELEFO F
       ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
         ON CF.CODIGO = C.CODCLI
ORDER BY CF.RAZSOC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente ...

 

SELECT distinct cf.codigo, CF.RAZSOC AS RazaoSocial,
       F.NUMTEL AS Telefone,
       C.NOMCON AS Contato
      --...
FROM CLIFOR CF
LEFT JOIN TELEFO F
       ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
         ON CF.CODIGO = C.CODCLI
ORDER BY CF.RAZSOC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabou saindo a mesma coisa...

 

Acho que não é distinct pois realmente os registros não estão duplicados e o distinct faz isso, certo? to pesquisando mais sobre distinct, left join, right join, cross join, full join... select com union etc...

 

Acredito que todos esses vão me retornar os campos completos. Não sei se existe um que comando não traga o valor se este já foi listado... talvez não estou conseguindo explicar...

 

Desejado:

Desejado:
nome	tel	codcontato	contato
EmpA	555	44		Joao
EmpA	666	55		Jose
EmpA	777	<null>(44)	<null>

 

O registro com telefone 777 tem o codcontato 44 mas como ele ja trouxe este contato 44 não quero que liste, ficando

EmpA	777	<null>	<null>

 

Sei lá se existe isso.

 

O LEFT JOIN daria este efeito se o número 44 não existisse no cadastro, mas ele existe. Precisaria que apenas listasse se já foi listado....

 

Desculpe a natural correria do desenvolvedor...

 

***********************

 

Perguntando para um amigo meu que passou aqui, achamos que não vou conseguir isso no select direto, e sim na hora de manipular os dados (ordena e tal e na hora de imprimir imprimo ou não)...

Continuo pesquisando mas deve ser isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não trazer valores já listados ?!

 

Tente o min ou max do fone ...

 

SELECT distinct cf.codigo, CF.RAZSOC AS RazaoSocial,
       F.NUMTEL AS Telefone,
       C.NOMCON AS Contato
      --...
FROM CLIFOR CF
LEFT JOIN TELEFO F
       ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
         ON CF.CODIGO = C.CODCLI
where F.NUMTEL = (select f2.numtel
                 from TELEFO F2
                 where F2.CODCLI = F.CODCLI
                 and   F2.codigo = F.codigo)
ORDER BY CF.RAZSOC

 

 

se telefo tem o codigo, senão tire a parte

and   F2.codigo = F.codigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não trazer valores já listados ?!

 

Tente o min ou max do fone ...

 

SELECT distinct cf.codigo, CF.RAZSOC AS RazaoSocial,
       F.NUMTEL AS Telefone,
       C.NOMCON AS Contato
      --...
FROM CLIFOR CF
LEFT JOIN TELEFO F
       ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
         ON CF.CODIGO = C.CODCLI
where F.NUMTEL = (select f2.numtel
                 from TELEFO F2
                 where F2.CODCLI = F.CODCLI
                 and   F2.codigo = F.codigo)
ORDER BY CF.RAZSOC

 

 

se telefo tem o codigo, senão tire a parte

and   F2.codigo = F.codigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe estar correndo de novo, dei uma olhada mas nao deu muito resultado nao e não sei se vai existir algo que não traga o valor se este já foi listado..., trazendo nulo no ligar....

 

nome tel contato

EmpA 555 Joao

EmpA 666 Jose

EmpA 777 <null>

EmpA 888 <null>

 

Cliente A tem 4 telefones e 2 contatos. O contato nao está relacionado com telefone e sim com o cliente

Desculpe novamente estar jogando as informações, correria do dia dia, deveria montar melhor a questão....

 

Ate mais e muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por query não tem como montar o que você quer (ou eu não vejo como) , pois não são as informações que constam da base.

 

Com geradores de relatório como Crystal dá para formatações do tipo "suprimir se duplicado" que caberia no caso dos contato, mas por query realmente não vejo como.

 

Na realidade seria algo do tipo

 

EMPRESA           CONTATO             FONE
IMASTERS          BRASIL              23456789
IMASTERS          *                    98765432
MAICROSOFTI       WILLIAN             23455432  

 

* BRASIL-no caso suprimido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, estou tentando de todas as formas mas está convergindo para isso mesmo, depois do select trazer as informações trato estes resultados no delphi

 

De qualquer forma foi bom relembrar todas as alternativas

 

Muito obrigado pelas informações!

 

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.