none
Tirar Duplicidade RRS feed

  • Pergunta

  • Bom dia..

    Tenho uma tabela de cadastro com aproximadamente 2 milhoes de telefones...

    O problema é que uma grande parte deles são duplicados...Não o telefone em sí, mas o nome das pessoas.
    Ex.: (DDD,Telefone,Cod_Rua,Nome,Numero,Complemento)

    11    69146457    69476    ACE REVESTIMENTOS LTDA    1978                                       
    11    69148670    69476    ACE REVESTIMENTOS LTDA    1978                                       
    11    64580685    63894    ACEBIAS GONCALVES LIMA    345                                        
    11    69190443    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    69190687    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    69196208    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    69196971    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    69197111    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142          CJ                           
    11    69198610    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    69620981    7037    ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA    2142                                       
    11    66856254    54374    ACEDIO AUGUSTO PIRES    617                                        
    11    64565523    31067    ACEDIR APARECIDO LUCIANO    116                                        
    11    69565388    67877    ACELA DIONISIA MANN RODRIGUES    182           CS                           
    11    61030094    7296    ACELAR MOVEIS E MAGAZINE LTDA    7578                                       
    11    61044535    97598    ACELAR MOVEIS E MAGAZINE LTDA    41                      



    Gostaria de saber uma forma de tirar essa duplicidade... Por exemplo, do cadastro de "ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA" tenho 7 telefones que estão no mesmo lugar (e obviamente são da mesma pessoa), mas precisaria deixar apenas 1 (não importa qual, apenas 1)

    Alguem saberia uma forma de fazer isso?

    Grato.
    terça-feira, 6 de outubro de 2009 12:45

Respostas

  • Boa Tarde...

    Segue  um exemplo para sql 2005 e 2008

    DECLARE @tb TABLE(DDD TINYINT,Telefone INT,Cod_Rua INT,Nome VARCHAR(100), Numero INT ,Complemento VARCHAR(20))
    INSERT @tb 
    SELECT 11,    69146457,    69476,   'ACE REVESTIMENTOS LTDA',                                1978, NULL UNION
    SELECT 11,    69148670,    69476,   'ACE REVESTIMENTOS LTDA',                                1978, NULL UNION
    SELECT 11,    64580685,    63894,   'ACEBIAS GONCALVES LIMA',                                 345, NULL UNION
    SELECT 11,    69190443,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69190687,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69196208,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69196971,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69197111,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, 'CJ' UNION
    SELECT 11,    69198610,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69620981,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    66856254,    54374,   'ACEDIO AUGUSTO PIRES',                                   617, NULL UNION
    SELECT 11,    64565523,    31067,   'ACEDIR APARECIDO LUCIANO',                               116, NULL UNION
    SELECT 11,    69565388,    67877,   'ACELA DIONISIA MANN RODRIGUES',                          182, 'CS' UNION
    SELECT 11,    61030094,    7296 ,   'ACELAR MOVEIS E MAGAZINE LTDA',                         7578, NULL UNION
    SELECT 11,    61044535,    97598,   'ACELAR MOVEIS E MAGAZINE LTDA',                           41, NULL
    
    SELECT DISTINCT
    	A.Nome, C.DDD, C.Telefone, C.Cod_Rua, C.Numero, C.Complemento  
    FROM 
    	@tb AS A 
    CROSS APPLY (
                 SELECT TOP (1) 
                     B.DDD,B.Telefone, B.Cod_Rua,B.Numero,B.Complemento 
                 FROM 
                     @tb AS B
                 WHERE B.Nome = A.Nome
                 ) AS C
    ORDER BY 
    	A.Nome

    espero q te ajude.

    Se for útil classifique.
    att. Leonardo Marcelino
    • Sugerido como Resposta Leonardo Marcelino quinta-feira, 8 de outubro de 2009 20:23
    • Marcado como Resposta Sanorab sexta-feira, 9 de outubro de 2009 13:23
    quinta-feira, 8 de outubro de 2009 20:23

Todas as Respostas

  • Bom Dia,

    Tenho um artigo detalhado sobre esse assunto. Maiores detalhes no link abaixo:

    Como eliminar linhas duplicadas e repetições no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!584.entry

    Vale a pena lembrar que uma pesquisa prévia no fórum retorna várias soluções para esse problema

    [ ]s,
     
    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    O princípio de Pareto, a curva ABC e consultas SQL
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!740.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 6 de outubro de 2009 14:43
  • Boa tarde.

    Para fazer isto deveria criar uma segunda tabela com o PK do Cliente, e os campos DDD, Telefone e Cod_Rua.
    Criaria um relacionamento com esta tabela utilizando os campos PK_Cliente.

    Na tabela cliente, droparia os campos retirados para a nova tabela e eliminaria os dados repetidos na tabela cliente.

    Acho que seu problema e mais conceitual...não é apenas comando.


    Até mais.
    quinta-feira, 8 de outubro de 2009 19:22
  • Boa Tarde...

    Segue  um exemplo para sql 2005 e 2008

    DECLARE @tb TABLE(DDD TINYINT,Telefone INT,Cod_Rua INT,Nome VARCHAR(100), Numero INT ,Complemento VARCHAR(20))
    INSERT @tb 
    SELECT 11,    69146457,    69476,   'ACE REVESTIMENTOS LTDA',                                1978, NULL UNION
    SELECT 11,    69148670,    69476,   'ACE REVESTIMENTOS LTDA',                                1978, NULL UNION
    SELECT 11,    64580685,    63894,   'ACEBIAS GONCALVES LIMA',                                 345, NULL UNION
    SELECT 11,    69190443,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69190687,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69196208,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69196971,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69197111,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, 'CJ' UNION
    SELECT 11,    69198610,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    69620981,    7037 ,   'ACECO PRODUTOS PARA ESCRITORIOS E INFORMATICA LTDA',    2142, NULL UNION
    SELECT 11,    66856254,    54374,   'ACEDIO AUGUSTO PIRES',                                   617, NULL UNION
    SELECT 11,    64565523,    31067,   'ACEDIR APARECIDO LUCIANO',                               116, NULL UNION
    SELECT 11,    69565388,    67877,   'ACELA DIONISIA MANN RODRIGUES',                          182, 'CS' UNION
    SELECT 11,    61030094,    7296 ,   'ACELAR MOVEIS E MAGAZINE LTDA',                         7578, NULL UNION
    SELECT 11,    61044535,    97598,   'ACELAR MOVEIS E MAGAZINE LTDA',                           41, NULL
    
    SELECT DISTINCT
    	A.Nome, C.DDD, C.Telefone, C.Cod_Rua, C.Numero, C.Complemento  
    FROM 
    	@tb AS A 
    CROSS APPLY (
                 SELECT TOP (1) 
                     B.DDD,B.Telefone, B.Cod_Rua,B.Numero,B.Complemento 
                 FROM 
                     @tb AS B
                 WHERE B.Nome = A.Nome
                 ) AS C
    ORDER BY 
    	A.Nome

    espero q te ajude.

    Se for útil classifique.
    att. Leonardo Marcelino
    • Sugerido como Resposta Leonardo Marcelino quinta-feira, 8 de outubro de 2009 20:23
    • Marcado como Resposta Sanorab sexta-feira, 9 de outubro de 2009 13:23
    quinta-feira, 8 de outubro de 2009 20:23
  • essa ai ajudou sim...

    muito obrigado!!

    Só uma coisa.. Para eu fazer isso com os 2 milhões de telefones, eu teria que fazer 2 milhoes de selects? Ou teria outra forma usando seu exemplo como base??
    sexta-feira, 9 de outubro de 2009 13:24


  • é só utilizar este exemplo como base.


    att. Leonardo Marcelino
    sexta-feira, 16 de outubro de 2009 05:13
  • Olá Leonardo, boa tarde.

    Peço a gentileza de retirar o Acebias Gonçalves Lima da divulgação mencionada acima.

    Tenho feito diversas pesquisas na internet com relação a este nome e solicitado cancelamento de todas estas.

    Informo que qualquer veiculação de informações deste nome não são permitida pelo mesmo.

    Obrigada!

    quarta-feira, 13 de novembro de 2013 14:02