Array
(
)

Filtrar cpfs duplicados Chave primaria auto increment id_pessoa

Jamilton Silva
|
MVP
    04 nov 2015

Boa tarde, Prezados.

Tenho a seguinte situação.

Existe uma tabela que possuí diversas informações e nela preciso filtrar todos os registros com o mesmo cpj/cnpj e que estejam com id_pessoa diferente.

O problema, acredito eu, que no passado não existia uma trava que bloqueava a inserção de pessoa com o mesmo cpf.

Exemplo:

cpf/cnpj NOME ID_PESSOA
07998414000538 EMPRESA1 LTDA-EPP 173435
07998414000538 EMPRESA1 LTDA-EPP 173438
025737682435 LUIZ HENRIQUE 40025
025737682124 MARCOS AJ 22551
025737682124 MARCOS AJ 22551
025737682124 MARCOS AJ 22551
025737682124 MARCOS AJ 00214
025737682124 MARCOS AJ 24457

Fernando Vicari
   - 04 nov 2015

Boa noite Jamilton

Não sei se o SQLServer tem a opção de você utilizar a clausula having.

Se tiver você pode fazer algo assim:

#CódigoSelect ID, NOME, CPF
from tabela_pessoa
where CPF in (select cpf
from (select cpf, count(*)
from tabela_pessoa
group by cpf
having count(*) > 1))


No oracle isso iria funcionar que é um espetáculo.

Marcos P
   - 04 nov 2015

Uma alternativa no Sql Server é agrupar a partir de uma temporária...

#Código
select cpf_cnpj
into #TMP
from pessoas
group by cpf_cnpj, id_pessoa

select cpf_cnpj, count(1) as Repeticoes
from #TMP
group by cpf_cnpj
having count(1) > 1

drop table #TMP

Marcos P
   - 04 nov 2015

ou um INNER JOIN da tabela com ela mesmo...

#Código
select distinct p1.cpf_cnpj
from pessoas p1 inner join pessoas p2 on (p1.cpf_cnpj = p2.cpf_cnpj and p1.id_pessoa <> p2.id_pessoa)

Marcos P
   - 05 nov 2015

E aí ?

Resolveu ?