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

Hay manera fácil de concatenar valores de filas?

Estas en el tema de Hay manera fácil de concatenar valores de filas? en el foro de SQL Server en Foros del Web. Hola amigos de forosdelweb,... Tengo un problemilla en este momento, no se si alguien me puedar dar una recomendacion del siguiente meollo que tengo... Tengo ...
  #1 (permalink)  
Antiguo 07/04/2011, 14:24
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 17 años, 7 meses
Puntos: 0
Pregunta Hay manera fácil de concatenar valores de filas?

Hola amigos de forosdelweb,...

Tengo un problemilla en este momento, no se si alguien me puedar dar una recomendacion del siguiente meollo que tengo...

Tengo actualmente algo asi:
Campo1 Campo2
001 Descripcion1
001 Descripcion2
001 Descripcion3

002 Descripcion1
002 Descripcion2
002 Descripcion3
002 Descripcion4
...
...

Hay alguna manera de mostrar algo como lo de abajo, pero sin tener que usar un bucle ni cursores, ni funciones?

Campo1 Campo2
001 Descripcion1,Descripcion2,Descripcion3
002 Descripcion1,Descripcion2,Descripcion3
...

Trabajo con SQLServer 2000

Gracias maestros!!!,

LE
  #2 (permalink)  
Antiguo 07/04/2011, 15:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hay manera fácil de concatenar valores de filas?

Hola LUISESPOCH:

Lamentablemente, SQL Server no implementa la función Group_Concat de MySQL, que hace exactamente lo que tu quieres, sin embargo puedes simular esta consulta. La implementación no es nada sencilla, pero te puede servir.

Código SQL:
Ver original
  1. DECLARE @Tabla TABLE (Campo1 VARCHAR(3), Campo2 VARCHAR(50))
  2. INSERT INTO @Tabla VALUES ('001', 'Descripcion1')
  3. INSERT INTO @Tabla VALUES ('001', 'Descripcion2')
  4. INSERT INTO @Tabla VALUES ('001', 'Descripcion3')
  5. INSERT INTO @Tabla VALUES ('002', 'Descripcion1')
  6. INSERT INTO @Tabla VALUES ('002', 'Descripcion2')
  7. INSERT INTO @Tabla VALUES ('002', 'Descripcion3')
  8.  
  9.  
  10. SELECT Campo1, LEFT(CamposConcatenados , LEN(CamposConcatenados )-1) AS CamposConcatenados
  11. FROM @Tabla AS extern
  12. CROSS APPLY
  13. (
  14.     SELECT Campo2 + ','
  15.     FROM @Tabla AS intern
  16.     WHERE extern.Campo1 = intern.Campo1
  17.     FOR XML PATH('')
  18. ) pre_trimmed (CamposConcatenados)
  19. GROUP BY Campo1, CamposConcatenados

el resultado de esto sería:

Código:
Campo1|CamposConcatenados
-----------------------------------------------------------
001|Descripcion1,Descripcion2,Descripcion3
002|Descripcion1,Descripcion2,Descripcion3
Checa estas páginas

http://stackoverflow.com/questions/4...ql-server-2005

http://explainextended.com/2010/06/2...in-sql-server/


Hay alguna razón en especial por la que no debas utilizar funciones??? te lo digo porque también puedes implementar una función de concatenación mucho más sencilla. Aquí un ejemplo:

http://www.forosdelweb.com/f21/conca...olumna-324779/

Saludos
Leo.
  #3 (permalink)  
Antiguo 07/04/2011, 15:49
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Hay manera fácil de concatenar valores de filas?

Leo, maestro...gracias por tu ayuda.. Lo de las funciones omito porque reduce la performance en el server, ya que tengo que hacer una gran cantidad de barridos de miles de filas... Te comento que me dio error la ejecucion del query pero debe ser algo minimo,..ya lo voy a averiguar-- Dejame ver cómo me va..y te aviso

LE
  #4 (permalink)  
Antiguo 08/04/2011, 08:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hay manera fácil de concatenar valores de filas?

Hola de nuevo LUISESPOCH: Creo que el editor concatenó algún caracter extraño antes en el select interno, ya que si lo copias y ejecutas tal cual está marcando el siguiente error:

Mens. 102, Nivel 15, Estado 1, Línea 25
Incorrect syntax near ' '.

Lo único que tenías que hacer es eliminar esos caracteres:

Código SQL:
Ver original
  1. DECLARE @Tabla TABLE (Campo1 VARCHAR(3), Campo2 VARCHAR(50))
  2. INSERT INTO @Tabla VALUES ('001', 'Descripcion1')
  3. INSERT INTO @Tabla VALUES ('001', 'Descripcion2')
  4. INSERT INTO @Tabla VALUES ('001', 'Descripcion3')
  5. INSERT INTO @Tabla VALUES ('002', 'Descripcion1')
  6. INSERT INTO @Tabla VALUES ('002', 'Descripcion2')
  7. INSERT INTO @Tabla VALUES ('002', 'Descripcion3')
  8.  
  9. SELECT Campo1, LEFT(CamposConcatenados , LEN(CamposConcatenados )-1) AS CamposConcatenados
  10. FROM @Tabla AS extern
  11. CROSS APPLY
  12. (
  13. SELECT Campo2 + ','
  14. FROM @Tabla AS intern
  15. WHERE extern.Campo1 = intern.Campo1
  16. FOR XML PATH('')
  17. ) pre_trimmed (CamposConcatenados)
  18. GROUP BY Campo1, CamposConcatenados

El ejemplo funciona perfectamente en SQL Server 2005 y posteriores, no estoy seguro si funciona para 2000, sería cuestión de probar.

En cuanto afectar el rendimiento utilizando funciones, pues sería cuestión de hacer pruebas.

Checa esta liga:

http://www.forosdelweb.com/f87/crear...upando-856024/

Ahí se muestra una función para concatenar registros, en donde se hace de manera recursiva. En lo particular me ha servido bastante, es más sencilla de implementar y hasta la fecha no me ha dado problemas con el servidor, aunque habría que considerar el volumen de información que vas a manejar.

De cualquier manera, haz la prueba para que elijas la opción que más te sirva.

Saludos
Leo.

Etiquetas: concatenar, filas
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 03:34.