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

[SOLUCIONADO] Eliminar registros duplicados sin GROUP BY

Estas en el tema de Eliminar registros duplicados sin GROUP BY en el foro de SQL Server en Foros del Web. Hola a todos, veréis, por motivos técnicos de un software específico que estoy utilizando, NO puedo utilizar GROUP BY para eliminar registros duplicados por lo ...
  #1 (permalink)  
Antiguo 30/01/2013, 10:07
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Pregunta Eliminar registros duplicados sin GROUP BY

Hola a todos,

veréis, por motivos técnicos de un software específico que estoy utilizando, NO puedo utilizar GROUP BY para eliminar registros duplicados por lo que estoy buscando una alternativa en vuestra sabiduría.

La consulta en cuestión es:

Código SQL:
Ver original
  1. SELECT * FROM GLOSARIOS AS A
  2. JOIN GLOSARIOS_ARTICULO AS B ON A.GL_No = B.GL_No
  3. WHERE A.GL_No = '441'

La tabla GLOSARIOS contiene los textos de cada uno de los glosarios de los artículos y GLOSARIOS_ARTICULO contiene una relación entre GLOSARIOS y ARTICULOS, de la siguiente manera:

ARTICULOS GLOSARIOS_ARTICULO GLOSARIOS
Ref <-----------------------------------> Ref GL_No <--------------------------------> GL_No


Al ejecutar la consulta arriba indicada, resulta que tengo 3 artículos que tienen el mismo glosario referenciado por lo que obtengo 3 registros los cuales quiero unificar en uno solo para no tenerlos repetidos.


Espero puedan ayudarme, muchas gracias!
  #2 (permalink)  
Antiguo 30/01/2013, 10: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: Eliminar registros duplicados sin GROUP BY

puedes poner un ejemplo de tus datos......se vale usar distinct?

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/01/2013, 10:11
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Hola Libras,

DISTINCT lo he probado pero no he obtenido el resultado deseado.

Un ejemplo de mis datos? te refieres a lo que me devuelve la consulta?
  #4 (permalink)  
Antiguo 30/01/2013, 10:14
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: Eliminar registros duplicados sin GROUP BY

exacto a que te devuelve tu consulta, porque dices que te aparecen datos duplicados, pero exactamente como.... :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/01/2013, 10:23
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Dejo una captura del resultado de la consulta:



Como puedes observar me aparecen 4 registros con GL_No = 441 debido a que existen 4 artículos que comparten el mismo glosario. Como ya he dicho me gustaría poder tener solo un registro por cada GL_No distinto y sin utilizar GROUP BY.
  #6 (permalink)  
Antiguo 30/01/2013, 10:31
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: Eliminar registros duplicados sin GROUP BY

que version de sql server usas??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 30/01/2013, 10:35
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Cita:
Iniciado por Libras Ver Mensaje
que version de sql server usas??
SQL Server 2008 R2
  #8 (permalink)  
Antiguo 30/01/2013, 10:36
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: Eliminar registros duplicados sin GROUP BY

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

sin group by, usando row_number......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 30/01/2013, 10:51
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Wow, funciona perfecto Libras!

ahora solo me aparece un registro por cada GL_No pero al ponerle el JOIN con GLOSARIOS_ARTICULO me los vuelve a duplicar!

Me estoy volviendo loco. En parte gracias a mi negación en SQL jaja
  #10 (permalink)  
Antiguo 30/01/2013, 10:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Eliminar registros duplicados sin GROUP BY

¿Lo haces con LEFT JOIN?
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 30/01/2013, 11:01
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: Eliminar registros duplicados sin GROUP BY

Pues hazlo asi:


select * from(
SELECT row_number() over(partition by a.gl_no order by a.gl_no) as rn, * FROM GLOSARIOS AS A
JOIN GLOSARIOS_ARTICULO AS B ON A.GL_No = B.GL_No
WHERE A.GL_No = '441'
) t1

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 30/01/2013, 11:11
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Hola iislas, sí, lo hice con LEFT JOIN.

Libras, he ejecutado la consulta tal como me has dicho:

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT ROW_NUMBER() OVER(partition BY a.gl_no ORDER BY a.gl_no) AS rn, * FROM F_GLOSSAIRE AS A
  3. LEFT JOIN F_ARTGLOSS AS B ON A.GL_No = B.GL_No
  4. WHERE A.GL_No = '441'
  5. ) t1

Respuesta de SQL Server: La columna 'GL_No' se ha especificado varias veces para 't1'.

Gracias de nuevo y perdonad las molestias, soy un autentico pato en SQL.
  #13 (permalink)  
Antiguo 30/01/2013, 11:38
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: Eliminar registros duplicados sin GROUP BY

el mensaje que te manda quiere decir que el select final tiene varias veces la columna GL_No, y esto es cierto jejeje ya que estas usando gl_no para la tabla A y para la tabla B y se esta haciendo un select * from tabla A join tabla B asi que aparecera 2 veces la columna GL_no. para solucionar esto


Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT ROW_NUMBER() OVER(partition BY a.gl_no ORDER BY a.gl_no) AS rn, a.* FROM F_GLOSSAIRE AS A
  3. LEFT JOIN F_ARTGLOSS AS B ON A.GL_No = B.GL_No
  4. WHERE A.GL_No = '441'
  5. ) t1
saludos!

P.S: si te faltan datos agregalos en el select :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 30/01/2013, 11:46
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Me da mucho reparo decirte esto Libras, pero me siguen apareciendo 4 registros totalmente iguales.

Siento mucho las molestias.
  #15 (permalink)  
Antiguo 30/01/2013, 11:47
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: Eliminar registros duplicados sin GROUP BY

mi mistake:

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT ROW_NUMBER() OVER(partition BY a.gl_no ORDER BY a.gl_no) AS rn, a.* FROM F_GLOSSAIRE AS A
  3. LEFT JOIN F_ARTGLOSS AS B ON A.GL_No = B.GL_No
  4. WHERE A.GL_No = '441'
  5. ) t1 WHERE rn=1

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 30/01/2013, 11:57
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar registros duplicados sin GROUP BY

Fantástico Libras!

Funciona a la perfección. Como me gustaría controlar de SQL como vosotros, sois unas máquinas.


Muchas gracias!

Etiquetas: select
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 01:59.