Consulta sql com remoção de duplicidade por contato/cliente
Salve !!!
Tenho banco Firebird 1.5 e to precisando fazer um filtro nas seguintes tabelas:
CLIENTE
IDCLIENTE
FANTASIA
TELEFONE
IDTELEFONE
IDCLIENTE
NOME
Tenho o seguinte sql:
E estou tendo este retorno:
O que eu preciso neste caso ai é que nao apareca na quarta linha nomvamente o nome MARCELO MOREIRA. O que acontece é que para o cliente EASY SISTEMAS o contato MARCELO MOREIRA foi cadastrado duas vezes mas com numeros de telefone diferente. Entao a duplicidade no cadastro esta certo mesmo ... eu so quero elimina-lo da consulta.
Se alguem puder me ajudar ...
valewss
Tenho banco Firebird 1.5 e to precisando fazer um filtro nas seguintes tabelas:
CLIENTE
IDCLIENTE
FANTASIA
TELEFONE
IDTELEFONE
IDCLIENTE
NOME
Tenho o seguinte sql:
select TEL.NOME, TEL.IDTELEFONE, TEL.IDCLIENTE, CLI.FANTASIA
from TELEFONE TEL
left join CLIENTE CLI on (TEL.IDCLIENTE = CLI.IDCLIENTE)
group by 1,2,3,4
order by CLI.FANTASIA, TEL.NOME
E estou tendo este retorno:
NOME IDTELEFONE IDCLIENTE FANTASIA
MARCELO MOREIRA 8 2 CARTAZ INFORMATICA
MARCIO PACELLI 9 2 CARTAZ INFORMATICA
MARCELO MOREIRA 4 1 EASY SISTEMAS LTDA
MARCELO MOREIRA 6 1 EASY SISTEMAS LTDA
PAULO NONATO 7 1 EASY SISTEMAS
MARCELO MOREIRA 10 3 MAXTRACK
O que eu preciso neste caso ai é que nao apareca na quarta linha nomvamente o nome MARCELO MOREIRA. O que acontece é que para o cliente EASY SISTEMAS o contato MARCELO MOREIRA foi cadastrado duas vezes mas com numeros de telefone diferente. Entao a duplicidade no cadastro esta certo mesmo ... eu so quero elimina-lo da consulta.
Se alguem puder me ajudar ...
valewss
Mmoreira
Curtidas 0
Respostas
Motta
22/04/2006
select TEL.NOME, TEL.IDTELEFONE, TEL.IDCLIENTE, CLI.FANTASIA from TELEFONE TEL left join CLIENTE CLI on (TEL.IDCLIENTE = CLI.IDCLIENTE) and tel.idtelefone = (select max(idtelefone) from telefone tel2 where tel2.idcliente = tel.idcliente) group by 1,2,3,4 order by CLI.FANTASIA, TEL.NOME
tenta isto ...
vai trazer o tel de maior codigo
GOSTEI 0
Mmoreira
22/04/2006
Mota,
O sql que vc me passou não retornou as informações como eu preciso. A duplicidade dos contatos ainda esta ocorrendo.
O sql que vc me passou não retornou as informações como eu preciso. A duplicidade dos contatos ainda esta ocorrendo.
GOSTEI 0
Motta
22/04/2006
Pelo que entendi deveria funcionar, pegaria o idfone de maior valor para um cliente.
GOSTEI 0
Emerson Nascimento
22/04/2006
tente assim:
note que eu optei por exibir o menor id do telefone ( min(TEL.IDTELEFONE) ).
você pode querer exibir o maior id do telefone. se sua opção for essa, altere para MAX(TEL.IDTELEFONE)
select TEL.NOME, min(TEL.IDTELEFONE) IDTELEFONE, TEL.IDCLIENTE, CLI.FANTASIA from TELEFONE TEL left join CLIENTE CLI on (TEL.IDCLIENTE = CLI.IDCLIENTE) group by TEL.NOME, TEL.IDCLIENTE, CLI.FANTASIA order by CLI.FANTASIA, TEL.NOME
você pode querer exibir o maior id do telefone. se sua opção for essa, altere para MAX(TEL.IDTELEFONE)
GOSTEI 0
Mmoreira
22/04/2006
emerson.en
Cara funcionou blzinha. Resolveu meu problema.
Fico muito agradecido.
valewsss
Cara funcionou blzinha. Resolveu meu problema.
Fico muito agradecido.
valewsss
GOSTEI 0
Mmoreira
22/04/2006
Emerson.en
Só completando, estou precisando colocar mais uma coluna na minha consulta, a coluna: TEL.TELEFONE então fiz assim:
Depois q fiz isso as duplicidades estam ocorrendo novamente ...
pode me dar uma luz??
valew
Só completando, estou precisando colocar mais uma coluna na minha consulta, a coluna: TEL.TELEFONE então fiz assim:
select TEL.NOME, min(TEL.IDTELEFONE) IDTELEFONE, TEL.IDCLIENTE, TEL.EMAIL, TEL.TELEFONE, /* Adicionei aqui */ CLI.FANTAZIA from TELEFONE TEL left join CLIENTE CLI on (TEL.IDCLIENTE = CLI.IDCLIENTE) group by TEL.NOME, TEL.IDCLIENTE, TEL.EMAIL, TEL.TELEFONE, /* Adicionei aqui */ CLI.FANTAZIA order by TEL.NOME, CLI.FANTAZIA
Depois q fiz isso as duplicidades estam ocorrendo novamente ...
pode me dar uma luz??
valew
GOSTEI 0
Emerson Nascimento
22/04/2006
tente diferente:
se ainda assim aparecerem registros repetidos, talvez seja por conta de o campo TELEFONE ter informações diferentes. se você quiser somente o telefone do primeiro registro encontrado, retire TEL2.TELEFONE do group by.
acho que é isso...
P.S: para sua consulta ficar mais veloz, crie os índices necessários (se ainda não o fez)
select TEL.NOME, TEL.IDTELEFONE, TEL.IDCLIENTE, TEL.EMAIL, TEL.TELEFONE, CLI.FANTAZIA from TELEFONE TEL left join CLIENTE CLI on (CLI.IDCLIENTE = TEL.IDCLIENTE) where TEL.IDTELEFONE in (select Min(TEL2.IDTELEFONE) from TELEFONE TEL2 group by TEL2.NOME, TEL2.EMAIL, TEL2.TELEFONE) order by TEL.NOME, CLI.FANTAZIA
acho que é isso...
P.S: para sua consulta ficar mais veloz, crie os índices necessários (se ainda não o fez)
GOSTEI 0
Mmoreira
22/04/2006
Dito e feito,
tirei o
TEL2.TELEFONE
do group by e funcionou blzinha!!!
valew cara
tirei o
TEL2.TELEFONE
do group by e funcionou blzinha!!!
valew cara
GOSTEI 0