Como retornar e excluir registros duplicados via select?
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 :)
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 :)
Marcioih
Curtidas 0
Melhor post
Emerson Nascimento
24/02/2005
para encontrar os duplicados é fácil:
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):
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.
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.
GOSTEI 3
Mais Respostas
Marcioih
23/02/2005
valeu emerson.en deu certo!
muito obrigado pela ajuda e atenção!
:D :)
muito obrigado pela ajuda e atenção!
:D :)
GOSTEI 1
Danilo Araujo
23/02/2005
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?
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?
GOSTEI 0
Diego
23/02/2005
SELECT DISTINCT
CAMPOS
FROM
TABELA
o distinct é como se fosse um group by
ou voce pode tambem usar o group by
CAMPOS
FROM
TABELA
o distinct é como se fosse um group by
ou voce pode tambem usar o group by
GOSTEI 0
Emerson Nascimento
23/02/2005
para saber quais valores estão duplicados:
para apagar os registros duplicados, mantendo apenas 1 deles:
matricula pode ser qualquer campo que não se repita nos registros
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
GOSTEI 2
Fabiano Carvalho
23/02/2005
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.
GOSTEI 0
E2ti
23/02/2005
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
select Nome, Count(Nome) from Tabela
group by Nome
having Count(Nome)>1
GOSTEI 0
Jacqueline
23/02/2005
Olá Pessoal, sou nova por aqui.
Não estou conseguindo excluir, o meu select vem certinho mas a exclusão não estou conseguindo, segue o select:
select distinct p1.prdid as ID,p1.prdcod,p1.prdcad,p1.prdori as Origem,p1.prddatcad,p1.prddatalt,ip.ipvpdvcod
from sa4prd p1 left join sa4prd p2 on p1.prdori=p2.prdori
left join sa4ipb ip on p1.prdcod=ip.ipvprdcod and ip.ipvpdvcod is null /*produtos sem vendas-173-id maior -ok*/
where p1.prdori <> '' and p1.prdid<>p2.prdid and p1.prdid > p2.prdid
Não estou conseguindo excluir, o meu select vem certinho mas a exclusão não estou conseguindo, segue o select:
select distinct p1.prdid as ID,p1.prdcod,p1.prdcad,p1.prdori as Origem,p1.prddatcad,p1.prddatalt,ip.ipvpdvcod
from sa4prd p1 left join sa4prd p2 on p1.prdori=p2.prdori
left join sa4ipb ip on p1.prdcod=ip.ipvprdcod and ip.ipvpdvcod is null /*produtos sem vendas-173-id maior -ok*/
where p1.prdori <> '' and p1.prdid<>p2.prdid and p1.prdid > p2.prdid
GOSTEI 0