Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Registros Duplicados

Estas en el tema de Registros Duplicados en el foro de SQL Server en Foros del Web. Que tal compas; xfa si me pudieran echar una mano con lo sgte: Tengo una Tabla Cliente en la cual se identifica que hay varios ...
  #1 (permalink)  
Antiguo 07/01/2014, 14:40
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Registros Duplicados

Que tal compas; xfa si me pudieran echar una mano con lo sgte:

Tengo una Tabla Cliente en la cual se identifica que hay varios clientes duplicados siendo la misma persona; para ello se realizaron ciertas validaciones para determinar que sea la misma persona x lo que se corroboró que los datos como Apellido Paterno-Materno-Nombre-Sexo- Fecha_Nac-Nacionalidad sean exactamente iguales.


Tabla Cliente:
IDCLIENTE | Paterno | Materno | Nombre | Sexo | Fecha_Nac | Nacionalidad
2222 | LOPEZ | PEREZ |JUAN |M |1950-10-02 00:00:00.000 |COL
4444 | LOPEZ | PEREZ| JUAN M | 1950-10-02 00:00:00.000 | COL


Tabla Movimientos
ID_MOV | Descr | Campo3 | Campo4 | IDCLIENTE | Nacionalidad | Tipo_Documento | Documento
Mov00005 | XXXX | BBB | CCCC | 2222 | COL | PAS | 7777
Mov00006 | X1X1X1 | B1B1B | C1C1| 2222 | COL | PAS | 7777

Mov00005 XXXX BBB CCCC 4444 COL PAS 7777
Mov00006 X1X1X1 B1B1B C1C1 4444 COL PAS 7777


Ahora se ha identificado que cada IDCLIENTE (2222 - 4444) tiene asociado distintos Movimientos como si fueran clientes distintos siendo en realidad los mismos. (Eso ya se validó)

Lo que se desea ahora es unir esos movimientos a un solo IDCLIENTE; significa que los Movimientos del IDCLIENTE 4444 pasaran al IDCLIENTE 2222 x lo que finalmente el IDCLIENTE tendrá 4 movimientos.

Tabla Cliente:
IDCLIENTE | Paterno | Materno | Nombre | Sexo | Fecha_Nac | Nacionalidad
2222 | LOPEZ | PEREZ | JUAN | M | 1950-10-02 00:00:00.000 | COL

Tabla Movimientos
ID_MOV | Descr | Campo3 | Campo4 | IDCLIENTE | Nacionalidad | Tipo_Documento | Documento
Mov00005 | XXXX | BBB | CCCC | 2222 | COL | PAS | 7777
Mov00006 | X1X1X1 | B1B1B | C1C1 | 2222 | COL | PAS | 7777
Mov00005 XXXX BBB CCCC 4444 COL PAS 7777
Mov00006 X1X1X1 B1B1B C1C1 4444 COL PAS 7777
  #2 (permalink)  
Antiguo 07/01/2014, 15:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Registros Duplicados

si ya identificaste cuales son los que tiene que cambiar, entonces solo haz un update al id cliente y listo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 08/01/2014, 08:22
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Registros Duplicados

Compa me liado realizando la consulta sobre registros duplicados si bien es cierto ya identifique los registros duplicados utilizando un query como:

Código SQL:
Ver original
  1. SELECT nro_ctt, COUNT(*)
  2. FROM ta_scc_arc
  3. GROUP BY nro_ctt
  4. HAVING COUNT(*) >1

Lo que necesito es visualizar el ID de esos registros duplicados que me muestra el contador ya que son como 900 mil registros y manualmente no puedo ir a uno a uno identificando los Id de los registros duplicados identificados.

Espero me puedan dar una mano.
Gracias

Última edición por gnzsoloyo; 08/01/2014 a las 09:18
  #4 (permalink)  
Antiguo 08/01/2014, 09:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Registros Duplicados

Mira compa si ya tienes esto:


Código SQL:
Ver original
  1. SELECT nro_ctt, COUNT(*)
  2. FROM ta_scc_arc
  3. GROUP BY nro_ctt
  4. HAVING COUNT(*) >1

porque no le agregas el id a ese query??? ya con el id puedes hacer el update no???porque pones esto:

Tabla Movimientos
ID_MOV | Descr | Campo3 | Campo4 | IDCLIENTE | Nacionalidad | Tipo_Documento | Documento
Mov00005 | XXXX | BBB | CCCC | 2222 | COL | PAS | 7777
Mov00006 | X1X1X1 | B1B1B | C1C1| 2222 | COL | PAS | 7777

Mov00005 XXXX BBB CCCC 4444 COL PAS 7777
Mov00006 X1X1X1 B1B1B C1C1 4444 COL PAS 7777


pero nunca explicas cual es la logica para reconocer que los registros del 4444 son duplicados del 2222???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 08/01/2014, 18:06
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Registros Duplicados

Hola Libras disculpa la molestia nuevamente te doy algunos alcances más para aclarar un poco el panorama

TABLA CLIENTE: Se ejecuta query para identificar registros duplicados en base sólo a estos parámetros PATERNO-NOMBRE-SEXO-FEC_NAC teniendo en cuenta que la tabla Cliente tiene muchos más campos pero solo realizo el filtro en base a los ya mencionados.

PATERNO-NOMBRE-SEXO-FEC_NAC-CONTADOR (900 mil registros)
PEREZ - LUIS - M - 12/06/70 - 2
LOPEZ - JOSE - M - 22/04/50 - 3

Realizo un select en base a los datos de la 1era consulta ingresando como parámetros determinados PATERNO - NOMBRE Y FEC_NAC para visualizar a detalle todos los campos del registro PARA IDENTIFICAR EL IDCLI *este último paso es el más engorroso porque tendría que sacar el IDCLI para los 900 mil registros para proseguir con los siguientes pasos y realizarlo de forma manual sería muy complicado*

TABLA CLIENTE:

IDCLI - PATERNO - NOMBRE - SEXO - FEC_NAC - SESION - APLICATIVO
222- PEREZ - LUIS - M - 12/06/70- 1457 - MMM
333- PEREZ - LUIS - M - 12/06/70- 1450 - SSS

En mi Tabla Movimiento hago un Select a toda mi tabla ingresando como parámetro cada uno de los IDCLIENTE es decir realizo 2 Select ya que cada registro tiene sus propios Movimientos


TABLA MOVIMIENTO:

IDMOV - DESCR - IDCLI - IDDOC - NUMDOC
M001 - FFF - 222 - PAS - 7777
M002 - FFF - 222 - PAS - 7777
M003 - FFF - 222 - PAS - 7777

IDMOV - DESCR - IDCLI - IDDOC - NUMDOC
M001 - FFF - 333 - PAS - 7777
M002 - FFF - 333 - PAS - 7777
M003 - FFF - 333 - PAS - 7777

Lo que se busca es unificar los registros de los Movimientos del IDCLI (222-333) ya que son la misma persona pero para ello necesito tener el dato de todos los IDCLI previamente.

Espero esta vez se entienda un poco mejor.
  #6 (permalink)  
Antiguo 08/01/2014, 20:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Registros Duplicados

ahora cual seria el id que quedaria el de sss o el de mmm, o es aleatorio???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/01/2014, 23:01
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Registros Duplicados

Puede ser cualquiera de los 2 porque ya valide por medio de PATERNO-NOMBRE-SEXO-FEC_NAC de que se trata de la misma persona; pero lo que si necesitaria tener es el ICLIENTE de ambos registros (222-333) para posteriormente realizar la unificacion de sus respectivos movimientos.

Solo que es liado sacar de forma manual uno a uno los IDCLIENTE de los registros duplicados; pero no encuentro la forma de que me los muestre de una forma un poco más automatizada.
  #8 (permalink)  
Antiguo 09/01/2014, 00:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Registros Duplicados

lo que podrias hacer es una vez teniendo los registros a los cuales se les va a aplicar el cambio de id hacer algo asi:

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT ROW_NUMBER() OVER(partition BY id_mov ORDER BY id_mov) AS rn,idmov,idcli FROM tabla) AS t1 WHERE rn=2
con esto obtendras los idmov donde se repiten los registros ya te di dependera como hacer el update si usas un id o usas otro :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 09/01/2014, 12:50
 
Fecha de Ingreso: agosto-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Registros Duplicados

Hola Libras; por el momento no he podido probar el query en su totalidad dado que el server se pone lento el query espero más tarde que haya menos gente poder probarlo.

Por otro lado un poco adelantandome al hecho de tener yami tabla filtrada con los registros que realmente necesito el IDPRIN y IDSEC que son el IDCLI de la misma persona; recordando que una persona tenía 2 IDCLIENTE por lo que en una tabla tengo ambos registros.

IDPRIN-IDSEC-PATERNO-NOMBRE-SEXO-FEC_NAC
222 - 333 - LOPEZ - LUIS - M - 1980-10-03
555 - 666 - PEREZ - MARIA- F- 1974-02-13

Ahora el siguiente paso es asignar el IDPRIN y IDSECa las variables

Código SQL:
Ver original
  1. DECLARE @GGG VARCHAR(40)
  2. DECLARE @HHH VARCHAR(40)
  3.  
  4.  SET @GGG =( SELECT uIdPrin FROM PRUEBA )
  5.  SET @HHH =( SELECT uIdSec FROM PRUEBA )

Si mi tabla tuviera un registro las variables sin problemas tendrian asignados 222 y 333 respectivamente pero mis variables necesitan se les asigne los ID's de cada registro


Ejemplo del 1er registro ... variables tomas las Id's respectivas en las variables
Código SQL:
Ver original
  1. @GGG=222
  2. @HHH=333
[ Lo siguiente es realizar ciertas operaciones con dichas variables en distintas tablas .... ]

Una vez terminado dicho proceso; deberá hacerlo con los IDPRIN IDSEC del 2do registro y asi consecutivamente.
Código SQL:
Ver original
  1. @GGG=555
  2. @HHH=666
Cómo podría asignarle consecutivamente los Id's a mis variables; vi en un caso que le agregaban LIMIT 1 pero no funciona; otros usan el TOP 2 pero como que no se presta mucho a lo que necesito.
Código SQL:
Ver original
  1. -- SELECT uIdPrin FROM PRUEBA LIMIT 1

Gracias por el apoyo.

Última edición por gnzsoloyo; 09/01/2014 a las 14:13
  #10 (permalink)  
Antiguo 09/01/2014, 12:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Registros Duplicados

aqui podrias hacer un procedure o funcion que reciba ambos parametros y si tienes los registros duplicado en una tabla mandarlos a la funcion por ejemplo si ya identificaste los id's y los pusiste en una tabla(temporal o variable) podria quedar algo como esto:


tabla_temporal
id1 id_2
2222 3333
4444 5555

ahora la funcion podria ser
Código SQL:
Ver original
  1. CREATE FUNCTION change_values(@new_id it,@old_id INT)
  2. AS
  3. BEGIN
  4. UPDATE TABLE......
  5. END

y en el query solo harias
Código SQL:
Ver original
  1. SELECT change_values(id1,id2) FROM temporal
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 09/01/2014 a las 14:13
  #11 (permalink)  
Antiguo 09/01/2014, 14:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Registros Duplicados

Cita:
Iniciado por cesarin2 Ver Mensaje
...

Cómo podría asignarle consecutivamente los Id's a mis variables; vi en un caso que le agregaban LIMIT 1 pero no funciona; otros usan el TOP 2 pero como que no se presta mucho a lo que necesito.
LIMIT es cláusula de MySQL, no de SQL Server.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, duplicados, fecha, registros, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:59.