none
Comparación de datos!!

    Pregunta

  • Necesito comparar datos para saber si estan duplicados ejmplo
    idCliente|| Nombre1||Nombre2||ApellidoPaterno||ApellidoMaterno
    -----------------------------------
    1 || Jose ||Francisco|| Perez ||Aguilar
    2 || Jose ||Francisco|| Aguilar || Perez

    puede ser que el capturista se haya equivocado al ingresar datos y pudiese estar duplicado, entonces necesito sacar una consulta que me arroje estos datos...
    intente un select * from tabla where ApellidoPaterno = ApellidoMaterno pero esto me traeria los que son identicos
    Saludos.
    sábado, 19 de mayo de 2012 15:22

Respuestas

  • Me imagino que fila 5 es 'manuel  eduardo franco  gomez'. Tengo razon?
    Si te entiendo bien:
    Select	T1.*
    From	MiTabla T1
    Inner Join MiTabla T2
    	On T1.idCliente<>T2.idCliente
    	And T1.Nombre1=T2.Nombre1
    	And T1.Nombre2=T2.Nombre2
    	And T1.ApellidoPaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno)
    	And T1.ApellidoMaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno);



    Geri Reshef http://gerireshef.wordpress.com

    sábado, 19 de mayo de 2012 18:43
  • Hola.

    La solución que plantea Geri es una de las muchas posibles combinaciones que tendrías que implementar, 2 registros que tengan igual nombre y cruzados los apellidos. Pero hay otras muchas (diferente nombre, iguales apellidos, o nombre acortado y sin acortar, como "María José" y "Mª José", la acentuación, que se incluya en el apellido paterno ambos apellidos), más las de las búsquedas difusas (que falle una letra en todo el nombre, por ejemplo).

    Como ves, la combinatoria es elevadísima. Estas tareas de calidad de datos se pueden afrontar con herramientas específicas para estos fines, como por ejemplo Data Quality Services, incluido en SQL Server 2012 (http://msdn.microsoft.com/es-es/library/ff877917.aspx), existiendo otras en el mercado. En el fondo se trata de identificar patrones por lógica difusa y crear agrupaciones de registros más o menos parecidos, para luego, de forma visual poder discernir entre ellos.

    Aun así, puedes implementar un conjunto de sentencias sencillas, como la que Geri sugiere, o incluso algo más elaborado, que te den una aproximación somera al problema. A lo mejor resuelve tu caso. En caso de que no sea así, ten presente estas otras herramientas específicas.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 19 de mayo de 2012 22:28
  • Hola.

    Lo que buscas es muy complicado y sólo puedo remitirme a mi anterior respuesta en este mismo hilo. Estamos hablando de calidad de datos. En esa línea, te puedo sugerir que revises este link:

    http://anastasiosyal.com/POST/2009/01/11/18.ASPX

    Ahí se describe una dll de código libre llamada Simmetrics, unas veinte funciones para las búsquedas difusas. Yo las he utilizado y funcionan y muy bien, pero más allá de eso, puede servirte para introducirte en la problemática.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 07 de junio de 2012 21:32

Todas las respuestas

  • Hola.

    ¿Y qué te gustaría obtener? ¿Los que sean parecidos o similares también? En ese caso, entraríamos en el ámbito de las búsquedas difusas, un terreno bastante complejo. 


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 19 de mayo de 2012 15:34
  • ok...por ejemplo me capturan estos datos

    idCliente Nombre1 Nombre2 Apellido1 Apellido2

    1 jose enrique perez medina

    2 manuel eduardo gomez franco

    3 jose francisco lopez fernandez

    4 jose enrique medina perez

    5 manuel e franco gomez

    pero  el cliente 1 y  4 y 2 y 5 podrían ser la misma persona ya que sus apellidos están invertidos,por que se habrán equivocado al capturarlo (capturistas u_u), como traería o como puedo comparar para que me traiga el cliente 1 y 4  y 2 y 5

    sábado, 19 de mayo de 2012 15:51
  • Me imagino que fila 5 es 'manuel  eduardo franco  gomez'. Tengo razon?
    Si te entiendo bien:
    Select	T1.*
    From	MiTabla T1
    Inner Join MiTabla T2
    	On T1.idCliente<>T2.idCliente
    	And T1.Nombre1=T2.Nombre1
    	And T1.Nombre2=T2.Nombre2
    	And T1.ApellidoPaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno)
    	And T1.ApellidoMaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno);



    Geri Reshef http://gerireshef.wordpress.com

    sábado, 19 de mayo de 2012 18:43
  • wooo si funciono :D ... y por lo que veo te compara por cada campo...excelente!! lo unica parte que no entiendo es la de

    T1.ApellidoPaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno)

    si podrías explicarme te lo agradecería muchísimo!

    pero en fin muchas gracias!!

    sábado, 19 de mayo de 2012 19:01
  • Hola.

    La solución que plantea Geri es una de las muchas posibles combinaciones que tendrías que implementar, 2 registros que tengan igual nombre y cruzados los apellidos. Pero hay otras muchas (diferente nombre, iguales apellidos, o nombre acortado y sin acortar, como "María José" y "Mª José", la acentuación, que se incluya en el apellido paterno ambos apellidos), más las de las búsquedas difusas (que falle una letra en todo el nombre, por ejemplo).

    Como ves, la combinatoria es elevadísima. Estas tareas de calidad de datos se pueden afrontar con herramientas específicas para estos fines, como por ejemplo Data Quality Services, incluido en SQL Server 2012 (http://msdn.microsoft.com/es-es/library/ff877917.aspx), existiendo otras en el mercado. En el fondo se trata de identificar patrones por lógica difusa y crear agrupaciones de registros más o menos parecidos, para luego, de forma visual poder discernir entre ellos.

    Aun así, puedes implementar un conjunto de sentencias sencillas, como la que Geri sugiere, o incluso algo más elaborado, que te den una aproximación somera al problema. A lo mejor resuelve tu caso. En caso de que no sea así, ten presente estas otras herramientas específicas.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 19 de mayo de 2012 22:28
  • T1.ApellidoPaterno In (T2.ApellidoPaterno,T2.ApellidoMaterno)

    es lo mismo como

    (T1.ApellidoPaterno=T2.ApellidoPaterno Or T1.ApellidoPaterno=T2.ApellidoMaterno)



    Blog: http://about.me/GeriReshef

    domingo, 20 de mayo de 2012 2:25
  • :D Geri Muchas gracias me fue de mucha utilidad agradezco tu ayuda...y qwal tienes razón hay infinidad de combinaciones y gracias por la recomendación..  investigare acerca de las herramientas que propones...
    domingo, 20 de mayo de 2012 3:36
  • DETECTAR CAMPOS DUCPLICADOS
    select distinct campo,COUNT(campo)[CANTIDAD REPETIDA] from tabla

     GROUP BY campo HAVING COUNT(campo)>1

    esto te puede servir para saber la cantidad de veces que se esta repitiendo un campo.

    saludos,

     

    Indet

    lunes, 21 de mayo de 2012 14:01
  • uuuhh ese ya me lo sabia pero gracias:::Ahora viene la versión Reloaded!!  no se si abrir un nuevo tema o seguirle a este..

    el caso seria compara datos antes de concentrarlos todos en una sola base ejem:

    base1  con el registro

    1 - P. Alejandro Perez G.

    2 - Henry Armando Loeza Ortiz

    base2 con el registro

    1 - Pedro A. P. Gomez

    2 - Manuel Alejandro Ciau Carrillo

    base3 con el registro

    1 - Pedro Alejandro Perez Gomez 

    2- Rossana Beatriz Martinez Diaz

    BaseConcentrada 

    1 - Pedro Alejandro Perez Gomez

    2 -Victor Manuel Flores Granados

    En este "escenario" el cliente proporciono de esta forma sus datos, los capturistas le dieron de alta así, y ya subí mi base 3 ala concentrada!

    ahora un compañero se encarga de subir la base1, como hago que se compare la base1 con la base concentrada! ,

    si P. Alejandro Perez G. de la base1 es parecido a Pedro Alejandro Perez Gomez de la concentrada!

    pero Henry Armando Loeza Ortiz no se parece a ninguno de los que esta en la concentrada!

    si es un cliente nuevo con que se va a comparar??

    si es nuevo como hago que se compare al mas parecido?? 

    com podria poner un margen de comparación? osea 


    base1  P. Alejandro Perez G.

    baseConcentrada Pedro Alejandro Perez Gomez

    Similitud 85%

    imaginado que queden como columnas XD

    espero su ayuda o consejos!!



    • Editado Manuel MDN lunes, 21 de mayo de 2012 19:25
    lunes, 21 de mayo de 2012 19:23
  • Hola.

    Lo que buscas es muy complicado y sólo puedo remitirme a mi anterior respuesta en este mismo hilo. Estamos hablando de calidad de datos. En esa línea, te puedo sugerir que revises este link:

    http://anastasiosyal.com/POST/2009/01/11/18.ASPX

    Ahí se describe una dll de código libre llamada Simmetrics, unas veinte funciones para las búsquedas difusas. Yo las he utilizado y funcionan y muy bien, pero más allá de eso, puede servirte para introducirte en la problemática.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 07 de junio de 2012 21:32