Foros del Web » Bases de Datos » SQL Server »

Consultas registros duplicados en SQL

Estas en el tema de Consultas registros duplicados en SQL en el foro de SQL Server en Foros del Web. Hola buen dia a todos, he estado batallando mucho con una consulta, les explico, tengo una tabla 'tabla1' con 4 campos y su clave primaria ...
  #1 (permalink)  
Antiguo 04/01/2013, 15:26
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Exclamación Consultas registros duplicados en SQL

Hola buen dia a todos, he estado batallando mucho con una consulta, les explico, tengo una tabla 'tabla1' con 4 campos y su clave primaria consta de dos 'campo1' y 'campo2', tengo miles de datos dentro esta tabla, lo que requiero hacer es una transferencia de datos masiva a otra tabla 'tabla2'.
El problema al hacer la transferencia es que me envia un error de registros duplicados, intente hacer lo siguiente

insert into tabla2(campo1, campo2, campo3, campo4,campo5)
(select campo1, campo2, campo3, campo4, 'constante'
from tabla1
group by campo1, campo2, campo3, campo4)

pero no funciona, dado que los registros diferencian en los campos diferentes a las claves primarias, pero son muchos registros y no los puedo ubicar,

Mi duda es, existe una manera de seleccionar todos los registros pero al momento de agrupar solamente comparar 2 de los campos, es decir:

select campo1, campo2, campo3, campo4, 'datoDefinido'
from tabla1
group by campo1, campo2

Me envia un error, obvio no se puede, pero requiero de algo asi, alguien que me ayude!!!!! porfavor !!!! estare muy agradecida
  #2 (permalink)  
Antiguo 04/01/2013, 15:44
 
Fecha de Ingreso: noviembre-2011
Mensajes: 47
Antigüedad: 2 años, 8 meses
Puntos: 5
Respuesta: Consultas registros duplicados en SQL

Puedes poner un ejemplo de tus datos y tu resultado esperado.
  #3 (permalink)  
Antiguo 04/01/2013, 15:51
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Ok mira mi consulta que devuelve la cantidad de registros correctos es la siguiente:

select Parte, Compania
from partes_tmp
group by Parte,Compania

estos dos campos forman la clave primaria de esta tabla, hasta aqui no tengo problemas,
pero al momento de insertar estos registros en una nueva tabla me envia errores de campos duplicados:

insert into Partes(Parte, Compania, DescParte, Existencia, Peso)
(select Parte, Compania
from partes_tmp
group by Parte,Compania)

Esto no es correcto porque necesito obtener todos los campos en el select, pero si hago eso, ya no considera la restriccion de campos repetidos, y me envia muchos campos repetidos dentro de la misma tabla, yo requiero de todos los campos para poderlos insertar,

algo como

insert into Partes(Parte, Compania, DescParte, Existencia, Peso)
(select Parte, Compania, descParte, existencia, 0
from partes_tmp
group by Parte,Compania, descParte, existencia)

pero si hago lo anterior no me respeta ni y me envia tambien los duplicados, no se si me explico?
  #4 (permalink)  
Antiguo 04/01/2013, 16:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

select parte,compania from(
select Parte, Compania, row_number() over(partition by parte,compania order by parte,compania) as rn
from partes_tmp
) t1 where rn=1

ejemplo:

Código SQL:
Ver original
  1. CREATE TABLE #temp (
  2. dato1 INT,
  3. dato2 INT
  4. )
  5.  
  6. INSERT INTO #temp VALUES (1,1)
  7. INSERT INTO #temp VALUES (2,1)
  8. INSERT INTO #temp VALUES (3,1)
  9. INSERT INTO #temp VALUES (1,1)
  10. INSERT INTO #temp VALUES (1,1)
  11. INSERT INTO #temp VALUES (2,1)
  12.  
  13. SELECT dato1,dato2 FROM(
  14. SELECT dato1,dato2,ROW_NUMBER() OVER(partition BY dato1,dato2 ORDER BY dato1,dato2) AS rn FROM #temp) t1 WHERE rn=1

Resultado:

1 1
2 1
3 1

solo 1 registro aunque haya repetidos :)
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.
  #5 (permalink)  
Antiguo 04/01/2013, 16:25
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Creo que conozco muy poco de sql server, olvide decir que trabajo con sql server 2000 y estoy desarrollando un DTS, pero tengo dudas, en la consulta que me enviaste, en que momento me arroja todos los campos (parte, compania, peso, etc...) ?

gracias por las respuestas pero aun no he podido solucionar el problema :(
  #6 (permalink)  
Antiguo 04/01/2013, 16:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

pregunta, como tienes una llave primaria y tienes campos duplicados??

no sera que en la tabla 2 no tienes declarados los 2 campos como llaves primarias??
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.
  #7 (permalink)  
Antiguo 04/01/2013, 17:01
 
Fecha de Ingreso: noviembre-2011
Mensajes: 47
Antigüedad: 2 años, 8 meses
Puntos: 5
Respuesta: Consultas registros duplicados en SQL

Ya probaste con
Código SQL:
Ver original
  1. SELECT DISTINCT Parte, Compania, descParte, existencia, 0
  2. FROM partes_tmp
  #8 (permalink)  
Antiguo 04/01/2013, 17:01
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

No es que en la tabla temporal, no tengo claves primarias, las claves primarias y las restricciones estan en la tabla a la que voy a transferir la informacion
  #9 (permalink)  
Antiguo 04/01/2013, 17:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

a ver no entiendo, tienes una tabla con varios datos pero con llaves primarias en 2 campos correcto? ahora transfieres estos a una temporal que es donde no funciona correcto? porque marca error si no tienes llaves primarias en la temporal? estas segura que es temporal?
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.
  #10 (permalink)  
Antiguo 07/01/2013, 08:08
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Disculpen si no me se explicar, es algo confuso, mire,
- tengo una tabla temporal que contiene toda la informacion que requiero, uso una temporal porque la informacion que me llega no la puedo insertar asi como asi, antes debo depurarla, por lo tanto en mi tabla temporal tengo ya mi informacion lista para transferirla. Dentro de esta tabla temporal tengo campos que se repiten. Estos campos tambien los depure haciendo un distinct en sql, sin embargo aun con esta consulta quedan algunos campos repetidos, yo debo verificar que no se repitan unicamente en 2 campos, los cuales son claves primaria en la tabla a la que debo transferir.

-Por otro lado tengo mi tabla real, a la que transferire todos los registros de mi tabla temporal, aqui si estan definidas las claves primarias en los 2 campos, y la cuestion es que al transferir de la tabla temporal me marca error de campos duplicados, son miles de registros y debo hacer una consulta de transferencia masiva:

insert into tabla2(campo1, campo2, campo3, campo4)
(select campo1, campo2, campo3, campo4 from tabla_tmp
group by campo1, campo2 )

Al presentarles esta conuslta quiero decir que necesito tooooodos los campos de mi tabla temporal, pero debo agruparlos unicamente en base a dos campos, que son los que son claves primarias en mi tabla destino
  #11 (permalink)  
Antiguo 07/01/2013, 08:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

i got it :) si quieres sacar unicamente los que no tiene repetidos(para insertarlos puedes usar este query)

Código SQL:
Ver original
  1. CREATE TABLE #temp (
  2. dato1 INT,
  3. dato2 INT,
  4. campo1 VARCHAR(20),
  5. campo2 VARCHAR(20),
  6. campo3 VARCHAR(20)
  7. )
  8.  
  9.  
  10. INSERT INTO #temp VALUES (1,1,'a','b','c')
  11. INSERT INTO #temp VALUES (2,1,'a1','b1','c1')
  12. INSERT INTO #temp VALUES (3,1,'a2','b2','c2')
  13. INSERT INTO #temp VALUES (1,1,'a3','b3','c3')
  14. INSERT INTO #temp VALUES (1,1,'a4','b4','c4')
  15. INSERT INTO #temp VALUES (2,1,'a5','b5','c5')
  16.  
  17. SELECT * FROM #temp WHERE CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) IN(
  18. SELECT CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) FROM #temp GROUP BY dato1,dato2 HAVING COUNT(*)=1)

Esto te regresa en este ejemplo:

3,1,'a2','b2','c2'

ahora si quieres saber cuales son los que tiene repetidos:


Código SQL:
Ver original
  1. SELECT * FROM #temp WHERE CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) IN(
  2. SELECT CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) FROM #temp GROUP BY dato1,dato2 HAVING COUNT(*)>1)

con este query obtienes los que estan repetidos, ahora ya depende de si quieres que nada mas se inserte un registro de estos o ninguno o cual de ellos vas a insertar o no se si todos los que repiten id tengan los mismos valores en los demas campos.

espero que esto resuelva tu question :)
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.
  #12 (permalink)  
Antiguo 07/01/2013, 09:47
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Muchas gracias por la respuesta Libras =D lo probare en cuanto tenga acceso al sistema.
  #13 (permalink)  
Antiguo 07/01/2013, 12:16
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Hola Libras, ya probe la consulta que me mandaste, y aun asi no me da el resultado que espero, pues la consulta que propones, unicamente me regresa los registros que no se repiten, yo necesito que me regrese todos, pero, que de los que se repiten 'n' cantidad, me regrese unicamente un registro es decir que descarte ese 'n-1'
de cualquier manera gracias
  #14 (permalink)  
Antiguo 07/01/2013, 12:18
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Y de los registros que tiene la clave primaria repetida es porque difieren en otro campo diferente a estos 2
  #15 (permalink)  
Antiguo 07/01/2013, 12:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

Código SQL:
Ver original
  1. CREATE TABLE #temp (
  2. dato1 INT,
  3. dato2 INT,
  4. campo1 VARCHAR(20),
  5. campo2 VARCHAR(20),
  6. campo3 VARCHAR(20)
  7. )
  8.  
  9. CREATE TABLE #temp3 (
  10. dato1 INT,
  11. dato2 INT,
  12. campo1 VARCHAR(20),
  13. campo2 VARCHAR(20),
  14. campo3 VARCHAR(20)
  15. )
  16.  
  17.  
  18. INSERT INTO #temp VALUES (1,1,'a','b','c')
  19. INSERT INTO #temp VALUES (2,1,'a1','b1','c1')
  20. INSERT INTO #temp VALUES (3,1,'a2','b2','c2')
  21. INSERT INTO #temp VALUES (1,1,'a3','b3','c3')
  22. INSERT INTO #temp VALUES (1,1,'a4','b4','c4')
  23. INSERT INTO #temp VALUES (2,1,'a5','b5','c5')
  24.  
  25.  
  26. SELECT dato1,dato2,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp GROUP BY dato1,dato2
  27.  
  28.  
  29. DECLARE @x INT
  30. DECLARE @y INT
  31. DECLARE @clave VARCHAR(20)
  32.  
  33. SET @x=1
  34. SET @clave=''
  35. while @x<=(SELECT COUNT(*) FROM #temp2)
  36. BEGIN
  37.     SELECT @clave=CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) FROM #temp2 WHERE rn=@x
  38.     INSERT INTO #temp3
  39.     SELECT top 1 * FROM #temp WHERE CONVERT(VARCHAR(20),dato1) + '|' + CONVERT(VARCHAR(20),dato2) = @clave
  40.     SET @x=@x+1
  41. END
  42.  
  43. SELECT * FROM #temp3
  44. DROP TABLE #temp2
  45. DROP TABLE #temp3

eso te regresa :

1 1 a b c
2 1 a1 b1 c1
3 1 a2 b2 c2

que es lo que necesitas no??
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.
  #16 (permalink)  
Antiguo 07/01/2013, 13:00
 
Fecha de Ingreso: enero-2013
Mensajes: 47
Antigüedad: 1 año, 7 meses
Puntos: 1
Respuesta: Consultas registros duplicados en SQL

Listo por fin obtuve lo que necesitaba gracias por tomarse su tiempo para contestar, y claro en lo que pueda, aportare a este foro
  #17 (permalink)  
Antiguo 08/01/2013, 16:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.059
Antigüedad: 7 años, 1 mes
Puntos: 158
Respuesta: Consultas registros duplicados en SQL

Libras, Demasiada paciencia...
__________________
MCTS Isaias Islas
  #18 (permalink)  
Antiguo 08/01/2013, 17:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Aqui y alla :)
Mensajes: 4.709
Antigüedad: 8 años
Puntos: 529
Respuesta: Consultas registros duplicados en SQL

Cita:
Iniciado por iislas Ver Mensaje
Libras, Demasiada paciencia...
Demasiada persistencia
__________________
I prefer Count Star to Count Dracula, because I don't like having to consider which Draculas are NULL.

Etiquetas: duplicados, registro, registros, select, sql, tabla, campos
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 15:56.
SEO by vBSEO 3.3.2