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

depurar registros duplicados en sql

Estas en el tema de depurar registros duplicados en sql en el foro de Bases de Datos General en Foros del Web. Estimados amigos, queria hacerles una consulta dado que tengo un problema con la base de datos que importe desde fox. Resulta que tengo los siguientes ...
  #1 (permalink)  
Antiguo 27/12/2006, 08:01
 
Fecha de Ingreso: diciembre-2006
Mensajes: 1
Antigüedad: 17 años, 4 meses
Puntos: 0
Exclamación depurar registros duplicados en sql

Estimados amigos, queria hacerles una consulta dado que tengo un problema con la base de datos que importe desde fox. Resulta que tengo los siguientes campos:
COD_PRESUPUESTO(int), COD_LINEAPRESUPUESTO(int), CANT (int) Y DESCRIPCION (char 40). El problema surge cuando la descripcion es demasiado extensa , por lo que su continuación prosigue en el registro siguiente, duplicandome los dos primeros campos mencionados y colocando en cero la cantidad.
Ejemplo.
Código PHP:
COD_PRESUP    LINEAPRESUP      CANT     DESCRIPC
  1001            1             3       placares con tres puertas 
  1001            1             0       centrales y dos cajones 
  1001            1             0       en la parte inferior  
  1001            2             1       cama de dos plazas 
  1002            1             2       puertas macizas 
Como veran necesito de algunas sentencias para concatenar el campo descripcion y eliminar los registros duplicados. Esta accion seria relaizada por una unica vez para acomodar los datos anteriores (alrededor de 20000 registros) ya q el nuevo sistema no permite estas complicaciones
Desde ya muchas gracias.

Última edición por BrujoNic; 27/12/2006 a las 10:50
  #2 (permalink)  
Antiguo 27/12/2006, 09:00
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: depurar registros duplicados en sql

Hola ceci_jjy. Bienvenido al foro.

El foro de Bienvenida a Foros del Web es para presentarse y, si quieres, contarnos algo sobre tí. Para preguntas concretas utiliza el foro que mejor se adapte a tu duda.

Muevo tu mensaje al foro de Bases de datos desde Bienvenida a Foros del Web.

Saludos,
  #3 (permalink)  
Antiguo 27/12/2006, 09:29
Avatar de jabi  
Fecha de Ingreso: noviembre-2006
Mensajes: 120
Antigüedad: 17 años, 6 meses
Puntos: 1
Re: depurar registros duplicados en sql

ceci_jjy, si estás usando Access cambia el tipo de datos de "descripción" a memo, porque aunque no es lo suyo, parece que vas a utilizar descripciones muy extensas, con lo que te quitas de problemas con el tamaño del campo... es la única forma que se me ocurre de arreglar eso... y supongo que si estás usando otro SGBD también tendrá un tipo de datos similar.

Salu2
__________________
No estoy aquí de vacaciones, creéme.
  #4 (permalink)  
Antiguo 27/12/2006, 10:55
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: depurar registros duplicados en sql

Ok, importaste HACIA tablas planas de Fox. Ahora viene la pregunta, ¿cómo generaste el archivo para importarlo? te digo esto porque, según recuerdo, en Fox lo que se importa es un archivo plano cuando es de otra BD. Si es así, debes tener en cuenta el delimitador que estes usando para separar campos y en ese caso, te recomiendo que delimites con TAB (tabuladores).
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #5 (permalink)  
Antiguo 27/12/2006, 13:26
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: depurar registros duplicados en sql

Hola Ceci.

No dices cual es tu base de datos, si tu base de datos es SQL Server, te dejo el siguiente código.

Si la base de datos es Access puedes migrarlo a SQL server transformar los datos y regresarlos a Access. Si es otra base de datos igual y te sirve la lógica. Y sino espero que le sirva a alguién.

El proceso es el siguiente:

Código:
DECLARE @intPresup int, @intLinea int, @intCant int
DECLARE @strDescrip varchar(8000) 

DECLARE curDatos CURSOR FOR 
SELECT COD_PRESUP, LINEAPRESUP, SUM(CANT)
FROM Tabla 
ORDER BY COD_PRESUP, LINEAPRESUP, 

OPEN curDatos 

FETCH NEXT FROM curDatos 
INTO @intPresup , @intLinea , @intCant

WHILE @@FETCH_STATUS = 0
BEGIN
	SET @strDescrip = ''
	-- Concatenamos la descripción 
	/* crédito a mithrandir  */
	SELECT @strDescrip = Descripcion + ' '+ @strDescrip  from Tabla
		WHERE COD_PRESUP = @intPresup AND LINEAPRESUP = @intLinea

	-- Insertamos el registro único
	INSERT INTO NuevaTabla (COD_PRESUP, LINEAPRESUP, CANT, Descripcion) 
		VALUES ( @intPresup, @intLinea, @intCant, @strDescrip) 

	-- Avanzar al siguiente registro.
	FETCH NEXT FROM curDatos 
	INTO @intPresup , @intLinea , @intCant
END

CLOSE curDatos
DEALLOCATE curDatos
NuevaTabla .- Tiene la misma estructura de Tabla.

Ahora el problema, como comenta jabi, es sobre la longitud del campo Descripcion, debes de verificar que quepa el contenido, recuerda que varchar tiene hasta 8000 bytes.

Saludos y suerte!

P.D. El crédito de mithrandir
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 11:15.