SQL - Como podría hacer esta consulta?

   
Vista:

Como podría hacer esta consulta?

Publicado por Carolina (5 intervenciones) el 15/11/2010 14:32:31
Hola, quería saber si a alguien se le ocurre cómo hacer esta consulta sin necesidad de usar un cursor:

Mi tabla sería algo como esto:

RecId Rep
424 Rep-BDA
424 Rep-XXY
425 Rep-AAG
425 Rep-AAB
425 Rep-SAG

Yo quisiera una consulta que me quede así:

RecId Rep
424 Rep-BDA, Rep-XXY
235 Rep-AAG, Rep-AAB, Rep-SAG

Gracias.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como podría hacer esta consulta?

Publicado por Leonardo Josué (880 intervenciones) el 18/11/2010 17:25:45
Buenos días Carolina,

En tu post no mencionas qué manejador de BD estás utilizando y eso es un problema, ya que cada Manejador provee mecanismos bastantes distintos para poder realizar lo que quieres.

En MySQL por ejemplo puedes utilizar la función GROUP_CONCAT()

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

en SQL podrías utilizar recursividad:

http://www.forosdelweb.com/f87/como-concatenar-informacion-varios-registros-solo-campo-389466/

Y en Oracle podrías hacer uso de la función LISTAGG() si utilizas la versión 11g o cursores si utilizas una versión anterior:

http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions087.htm
http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como podría hacer esta consulta?

Publicado por Carolina (5 intervenciones) el 18/11/2010 21:48:41
Hola !!

Muchas gracias Leonardo por tu ayuda.
El motor de base de datos que uso es SQL Server 2008

Al final lo que se me ocurrió hacer fue recorrer la tabla con una variable y con el while. Mi intención era no usar cursores ya que enlentecen el sistema.

Muchas Gracias !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como podría hacer esta consulta?

Publicado por Leonardo Josué (880 intervenciones) el 18/11/2010 22:37:27
Hola Carolina, solo una observación, si checas mi post te comento que para SQL Server hay una forma de hacer lo que quieres utilizando una especie de recursividad (aunque no propiamente dicho), ya que un ciclo while al igual que los cursores puede mermar el rendimiento del servidor. dejo nuevamente la liga con la información respectiva:

http://www.forosdelweb.com/f87/como-concatenar-informacion-varios-registros-solo-campo-389466/

En ningún te recomendé utilizar Cursores con SQL Server, estos serían una opción para ORACLE, si ya obtuviste el resultado que querías, no está demás que analices otras opciones.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como podría hacer esta consulta?

Publicado por Carolina (5 intervenciones) el 19/11/2010 13:13:01
GRACIAS LEO !!!!!!!!!!

SOS UN GROSO !!!!

Esto es 1 millón de veces mejor de lo que se me había ocurrido a mí.
No conocía esto de la recursividad en SQL Server ...

MIL GRACIAS !!!!!!! :) :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como podría hacer esta consulta?

Publicado por Carolina (5 intervenciones) el 19/11/2010 13:54:01
Leo, te hago otra pregunta sobre lo mismo ...

Se te ocurre alguna manera de (sobre SQL Server) sacar el cursor en un caso como este:

Por cada acción que el usuario hace, la misma se guarda en 2 tablas: LOGS y LOGS_DET. Ahí guardo quién hizo la acción, exactamente qué hizo el usuario y también todas las acciones que el sistema hace por detrás, como ser, cuando se cambia el registro al estado FACTURADO, el sistema guarda en un campo la fecha en el que el usuario hizo ese cambio. Entonces, tengo toda la info para hacer luego un deshacer. Por lo tanto, esto de guardar los logs para mí es muy importante.

Pero tengo el problema de que cuando hago un insert de varios registros a la vez, no conozco una manera de obtener todos los ids recién insertados ya que al haber muchos usuarios en mi sistema puede que algunos los haya insertado el usuario en cuestión y otros los haya insertado otro usuario. Por lo tanto, esto lo hago con un CURSOR.

Lo que hago es recorrer todos los registros que tengo que insertar, por cada inserción obtengo el id del registro insertado e inserto el log correspondiente.

Se te ocurre una manera de sacar el cursor en este caso?

GRACIAS !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como podría hacer esta consulta?

Publicado por Carolina (5 intervenciones) el 19/11/2010 15:35:14
Acá encontré la respuesta a mi pregunta de cómo obtener todos los identity de un insert sobre varios registros: http://grimpidev.wordpress.com/category/identitys/

GRACIAS !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar