Como retornar e excluir registros duplicados via select?

23/02/2005

248

Olá pessoal,

gostaria de saber como posso retornar por exemplo
todos os funcionários de nomes iguais e se por exemplo retornar três registros, excluir a partir do segundo pra frente via SQL??

Pessoal, qualquer ajuda agradeço!

Muito obrigado! :D :)


Responder

Post mais votado

24/02/2005

para encontrar os duplicados é fácil:

select Nome, Count(Nome) from Tabela
group by Nome
having Count(Nome)>1


assim serão exibidos todos os nomes com mais de uma entrada e o número de repetições de cada nome.

agora, para deletar, talvez o código abaixo sirva (não testei):

delete from Tabela
where Nome in
  (select Nome from Tabela
   group by Nome
   having Count(Nome)>1)
and not matricula in
  (select Min(Matricula) from Tabela
   group by Nome
   having Count(Nome)>1)


assim seriam excluídas todas as entradas duplicadas, mantendo-se a primeira (supondo que o número de matrícula seja sequencial).
Mas lembre-se: pode haver homônimos. nesse caso seria bom fazer o agrupamento pelo nome + cpf.


Responder

Mais Posts

24/02/2005

Marcioih

valeu emerson.en deu certo!
muito obrigado pela ajuda e atenção!
:D :)


Responder

19/02/2016

Danilo Araujo

E como eu faria pra agrupar nome + cpf?

como eu faria se eu tivesse 3 nomes e 3 cpfs totalmente iguais e só quisesse manter 1?


Estou com o seguinte problema:
tenho um campo de hostnames
e outro de licenças

existem várias licenças repetidas na mesma maquina. Como eu faço pra distingui-las?
Responder

24/02/2016

Diego

SELECT DISTINCT
CAMPOS
FROM
TABELA

o distinct é como se fosse um group by

ou voce pode tambem usar o group by
Responder
para saber quais valores estão duplicados:
select Nome, Cpf from Tabela
group by Nome, Cpf
having Count(Nome)>1


para apagar os registros duplicados, mantendo apenas 1 deles:
delete from Tabela
where Nome+Cpf in
  (select Nome+Cpf from Tabela
   group by Nome, Cpf
   having Count(Nome)>1)
and not matricula in
  (select Min(Matricula) from Tabela
   group by Nome, Cpf
   having Count(Nome)>1)

matricula pode ser qualquer campo que não se repita nos registros
Responder
SELECT * FROM (ROW_NUMBER() OVER(PARTITION BY NOME,CPF ORDER BY NOME) AS D,*
FROM TABLE) AS A
WHERE D > 1


D > 1 significa que está duplicado.
Responder

28/03/2018

E2ti

Boa tarde, como faço para esta função ignorar os acentos ?

select Nome, Count(Nome) from Tabela
group by Nome
having Count(Nome)>1
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar