Criar consulta de cliente e telefone

Firebird

21/05/2008

Bom dia*

Preciso criar uma consulta onde o cliente pode ter varios telefones, ou seja, na tabela cliente fica o codigo da tabela telefone, e a tabela telefone fica com um dos telefones...
ex.:
[u:c3896aac17]tab. clientes[/u:c3896aac17]
[u:c3896aac17]cod.cliente[/u:c3896aac17]PK
cod.telefone

[u:c3896aac17]tab.telefones[/u:c3896aac17]
[u:c3896aac17]cod.tabela[/u:c3896aac17]PK
cod.cliente-FK
tp,telefone-FK
numero telefone

se o tp do numero for 1=residencia, 2=celular


Desde já agradeço pela força!!!
;)


Lip

Lip

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

21/05/2008

tente essa instrução:
select
  cli.nome,
  case when tel.tptelefone = 1 then ´Residência´
       when tel.tptelefone = 2 ´Celular´
       else ´Sem telefone´ end Tipo,
  tel.numero
from
  clientes cli
left join
  telefones tel on (tel.codcliente = cli.codcliente)



GOSTEI 0
Lip

Lip

21/05/2008

select
clp.nome,
case when tel.tipo = 1 then ´Residência ´
when tel.tptelefone = 2 ´Celular ´
else ´Sem telefone´ end Tipo,
tel.numero
from
cl_pacientes clp
left join
cl_pacientetelefones tel on (tel.paciente = clp.handle)

msg. de erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 8.
when.

eu tentei fazer um sql um pouco diferente ontem, e o erro era parecido com este, acho que o meu ibexpert ta com pau, por isso dessa forma não vai funcionar.....
tem alguma forma mais simples, com um select um pouco grosseiro, mas que não trave o pc ao fazer a consulta??


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

21/05/2008

pergunta: qual banco de dados está usando??? (e qual versão)


GOSTEI 0
Martins

Martins

21/05/2008

Se vc estiver usando Firebird esse código funciona sim.

Reveja agora o case.

select 
  cli.nome, 
  case tel.tipo 
  when 1 then ´Residência´
  when 2 then ´Celular´
  else ´Sem telefone´ end
  Tipo, 
  tel.numero 
from 
  clientes cli 
left join 
  telefones tel on (tel.codcliente = cli.codcliente)
Order By 1


Não sei pq não está reconhecendo a instrução case corretamente. Lembrando que este comando foi introduzido a partir da versão 1.5 do FB.


GOSTEI 0
André Rodrigues

André Rodrigues

21/05/2008

Ola lip,

a primeira coisa seria modificar suas tabelas, ficariam assim:

[u:3905dd0fe5][b:3905dd0fe5]Clientes[/b:3905dd0fe5][/u:3905dd0fe5]
cod_clientePK
nomecliente

[b:3905dd0fe5][u:3905dd0fe5]TipoTelefone[/u:3905dd0fe5][/b:3905dd0fe5]
cod_tipotelefonePK
tipotelefone

[u:3905dd0fe5][b:3905dd0fe5]Telefones[/b:3905dd0fe5][/u:3905dd0fe5]
cod_telefonePK
cod_cliente-FK
cod_tipotelefone-FK
numerotelefone

e faria a seguinte consulta:

select a.nomecliente, b.numerotelefone, c.tipotelefone from clientes a
inner join telefones b on (a.cod_cliente = b.cod_cliente)
inner join tipotelefone c on (c.cod_tipotelefone = b.cod_tipotelefone)


GOSTEI 0
Lip

Lip

21/05/2008

ae galera
nao pude modificar as tabelas, mas o case* do Martins funciona sim... eu num consegui explicar direito, mas o interbase tava ´conflitando´ com o firebird, aquele bendito arquivinho gds32.dll

mas agora ta td ok

vlw, obrigado a todos


GOSTEI 0
POSTAR