none
Tirar duplicidade com o Distinct RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma base com tres milhoes de nome, mas com CNPJ 's duplicados... tentei tirar essa duplicidade e transferir todos os dados para outra tabela com a seguinte query:

    select distinct cnpj, nome, logradouro, telefone into tabelaxxxx from td2009

    Mas essa select me retornou os dados duplicados. Existe alguma outra query no qual eu possa tirar a duplicidade de cnpj e transferir a base sem duplicidade com todos os outros campos para uma nova tabela?

    Agradeço pela ajuda de vocês!

    Abs,

    sexta-feira, 13 de novembro de 2009 17:20

Respostas

  • Lá Leninha,

    O distinct diz respeito ao registro inteiro.

    Tente desta forma:

    select cnpj, MAX(nome), MAX(logradouro), MAX(telefone) into tabelaxxxx
    from td2009
    group by cnpj


    Veja se resolve e nos retorne.


    Abraço!!


    Classifiquem as respostas. O Fórum agradece!!
    • Sugerido como Resposta Alexandre VM terça-feira, 17 de novembro de 2009 10:37
    • Marcado como Resposta Fernanda Simões terça-feira, 17 de novembro de 2009 13:06
    sexta-feira, 13 de novembro de 2009 17:25

Todas as Respostas

  • Lá Leninha,

    O distinct diz respeito ao registro inteiro.

    Tente desta forma:

    select cnpj, MAX(nome), MAX(logradouro), MAX(telefone) into tabelaxxxx
    from td2009
    group by cnpj


    Veja se resolve e nos retorne.


    Abraço!!


    Classifiquem as respostas. O Fórum agradece!!
    • Sugerido como Resposta Alexandre VM terça-feira, 17 de novembro de 2009 10:37
    • Marcado como Resposta Fernanda Simões terça-feira, 17 de novembro de 2009 13:06
    sexta-feira, 13 de novembro de 2009 17:25
  • Oi Alexandre. Obrigada pela ajuda!

    Coloquei a query da seguinte forma (o de cima foi só um exemplo de bd):

    SELECT CNPJ, Max(NOME), Max(TIPO_DOC), Max(CNPJ), Max(TIPO_LOGR_A), Max(LOGRADOURO_A), Max(NUMERO_L), Max(COMPLEMENTO_A), Max(CEP_A), Max(BAIRRO_A), Max(CIDADE_A), Max(UF_A), Max(DDD_A), Max(TELEFONE_A) into TABELAXXX FROM TBP_P2 GROUP BY CNPJ

    Só q me trouxe o seguinte resultado:

    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 2 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 3 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 4 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 5 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 6 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 7 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 8 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 9 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 10 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 11 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 12 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 13 of 'TABELAXXX'.
    Server: Msg 8155, Level 16, State 1, Line 1
    No column was specified for column 14 of 'TABELAXXX'.

    sexta-feira, 13 de novembro de 2009 17:44
  • Leninha,

    Você vai ter que colocar o nome das colunas, dessa forma:

    SELECT CNPJ, Max(NOME) AS NOME, Max(TIPO_DOC) AS TIPO_DOC.....



    Abraço!!

    Classifiquem as respostas. O Fórum agradece!!
    sexta-feira, 13 de novembro de 2009 17:52
  • Oi Alexandre

    Rodei a query mas travou o servidor... vou rodar novamente mas vai demorar. Assim que eu conseguir aviso se deu certo ou não ok?

    Super obrigada pela sua ajuda e otimo final de semana!!!
    sexta-feira, 13 de novembro de 2009 19:04
  • Leninha,

    Como você esta querendo fazer um Select Into gerando uma nova table que os dados desta atual, mas esta utilizando Group By é necessário nomear cada coluna que esta sendo agrupa para que o SQL Server possa gerar a outra table com os respectivos nomes para cada coluna.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 14 de novembro de 2009 22:26
  • Olá,

    Aproveitando o tópico, seria possível criar uma function para percorrer e editar uma tabela (no caso, a base de CNPJ´s), conforme é feito com recordset no VBA?

    Obs.: a instrução

    select cnpj, MAX(nome), MAX(logradouro), MAX(telefone)
    into tabelaxxxx
    from td2009
    group by cnpj

    deve resolver se a duplicidade estiver ocorrendo em todos os campos; se a duplicidade estiver somente no CNPJ, poderá retornar nome, logradouro e telefone de registros diferentes, dentro do mesmo grupo de CNPJ´s duplicados.
    segunda-feira, 16 de novembro de 2009 09:35
  • Leninha,

    Você conseguiu solucionar o seu problema?
    Caso afirmativo poste a solução para que outras pessoas se beneficiem.

    Att,
    Fernanda


    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    segunda-feira, 16 de novembro de 2009 17:39
  • Olá, Fernanda. Tudo bem?

    Peço desculpas não ter postado antes, mas só tive tempo de rodar a query hoje e ela funcionou perfeitamente.

    Obrigada Alexandre e a todos pela ajuda! Vocês são d+++!!!

    Abraços à todos!

    terça-feira, 17 de novembro de 2009 00:50