Ir para conteúdo
Fórum Script Brasil
  • 0

DISTINCT com todos os campos da tabela


Carolina Marinho

Pergunta

Bom dia,

tenho uma tabela com 22 campos, onde o campo TELEFONE possui registros duplicados. Preciso pegar todos os campos da tabela mas que o TELEFONE não se repita.

Exemplo:

NOME_CLIENTE | ENDERECO | TELEFONE | CPF

MARIA DA SILVA | RUA DO SABÃO 23, 505 | 12345678 | 123.456.789-0

JOSE DE SOUZA | RUA 13 48, CASA 2 | 12345678 | 987.654.321-0

Os telefones são iguais. Eu preciso pegar os 4 campos da tabela mas somente um registro, não importando qual deles (MARIA ou JOSE)

alguém pode me ajudar?

Editado por Carolina Marinho
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Carolina,

Sinceramente não consegui resolver utilizando apenas 1 select... :.(

Criei uma temporária onde insiro os telefones com distinct. Após inserção, "updato" os campos. Como a inserção foi realizada utilizando o distinct, os telefones não serão duplicados.

Abaixo estão as temporárias q criei com os dados de exemplo e inserindo na tabela de resultado.

você pode alterar a criação da tabela de # para @ (tempo de execução - tem q trocar a sintaxe de declaração da mesma).

Espero ter ajudado. Qualquer problema, posta ai... :.)

-- Criação de tabela

create table #dados (NOME_CLIENTE varchar(80), ENDERECO varchar(80), TELEFONE int, CPF varchar(13))

create table #Tabela (NOME_CLIENTE varchar(80), ENDERECO varchar(80), TELEFONE int, CPF varchar(13))

-- Inserção dos dados

insert into #dados (NOME_CLIENTE, ENDERECO, TELEFONE, CPF)

values ('MARIA DA SILVA' , 'RUA DO SABÃO 23, 505' , 12345678 , '123.456.789-0')

insert into #dados (NOME_CLIENTE, ENDERECO, TELEFONE, CPF)

values ('JOSE DE SOUZA' , 'RUA 13 48, CASA 2' , 12345678 , '987.654.321-0')

--select * from #dados

-- Inserção dos telefones, sem repetição

insert into #tabela (Telefone)

select distinct telefone from #dados

-- inserção das demais informações

update #tabela set NOME_CLIENTE=d.NOME_CLIENTE, ENDERECO=d.ENDERECO, CPF=d.CPF from #tabela t, #dados d where t.Telefone=d.Telefone

select * from #tabela

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Fulvio, boa tarde!

Pensei nessa possibilidade também, o problema é que eu to fazendo isso tudo via VB 6, e assim fica beeeeem complicado...

A solução que eu achei foi:

Gerar um SEQUENCIAL na tabela;

ALTER TABLE DBO.tabela

ADD SEQUENCIAL BIGINT

Incrementar esse SEQUENCIAL;

declare @secuence BIGINT ;

set @secuence = '0';

update DBO.tabela

set @secuence = SEQUENCIAL = @secuence + 1

E comparar o TELEFONE;

select * from tabela as a

inner join

(select MAX(SEQUENCIAL) AS SEQUENCIAL ,TELEFONE from tabela

group by telefone) as b

on a.SEQUENCIAL = b.SEQUENCIAL

ORDER BY A.TELEFONE

Isso me deu o resultado esperado, mas corro o risco de um timeout em algum lugar... :)

Muito obrigada, Fulvio!!! Vou testar a sua solução e verificar o menor tempo de execução!

Link para o comentário
Compartilhar em outros sites

  • 0

Duas soluções possíveis:

Usar GROUP BY em telefone e usar função de agregação nos outros campos. Mais ou menos assim:

SELECT MAX(campo1), MAX(campo2), telefone 
FROM tabela GROUP BY telefone
Outra solução é fazer uma sub-query que traga ids sem repetição do telefone. Ex:
SELECT * FROM tabela WHERE id IN (SELECT MAX(id) FROM tabela GROUP BY telefone)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...