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

Como unificar (concatenar) registros de una columna

Estas en el tema de Como unificar (concatenar) registros de una columna en el foro de SQL Server en Foros del Web. Hola colegas! Creo que el titulo ya les da una idea de lo que necesito. A continuacion paso a explicar el problema: Tengo una consulta ...
  #1 (permalink)  
Antiguo 12/04/2007, 10:10
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Pregunta Como unificar (concatenar) registros de una columna

Hola colegas!
Creo que el titulo ya les da una idea de lo que necesito. A continuacion paso a explicar el problema:
Tengo una consulta que me devuelve un conjunto de registros (cabecera). Por cada uno de estos registros tengo un detalle.
Lo que yo necesito es, unificar (concatenar) un campo del detalle. Por ejemplo:
CABECERA
Cita:
Nro. Nombre
1 Juan
2 Pedro
3 Carlos
DETALLE
Cita:
Nro. Cod. Producto
1 001 Pan
1 002 Queso
1 003 Papas
RESULTADO
Cita:
Nro. Nombre Productos
1 Juan Pan; Queso; Papas
2 Pedro xxx
3 Carlos yyy
Cualquier idea es bienvenida, aunque ya me han dicho que debo usar una funcion, pero esto no lo tengo muy claro. Si alguien tiene algun ejemplo, le agradecere mucho.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #2 (permalink)  
Antiguo 12/04/2007, 11:18
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Como unificar (concatenar) registros de una columna

Con esto obtendrias la concatenacion, ya solo faltaria que lo adaptes para obtener el de todos los productos de la consulta ( ya sea con funcion o ciclo)

Código:
Declare @strConcatenado varchar(8000)

Select @strConcatenado = ''

Select @strConcatenado = @strConcatenado + Producto + '; '
From   tblDetalle
Where  Nro = @Numero

--------------------------------------
-- Para eliminar el ultimo separador
--------------------------------------
If len(@strConcatenado) > 0  Select @strConcatenado = left(@strConcatenado, len(@strConcatenado) - 2)

Select @strConcatenado
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 12/04/2007, 13:34
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Como unificar (concatenar) registros de una columna

Complicación:

Solo ten en cuenta que ese tipo de sintaxis no es estándar en TSQL (@var=@var+algo), por lo que es un tanto frágil: si complicas la sentencia no da el resultado esperado.

Si caes en ese caso entonces tendrás que crear una tabla temporal (con la sentencia compleja) y entonces crear la cadena con un select simple a tu tabla temporal.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 16/04/2007, 08:25
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Re: Como unificar (concatenar) registros de una columna

Amigos, me he estancado. Tengo un sp, donde tengo mi query, desde el cual llamo a la funcion que el amigon Andres95 tan gentilmente me brindo. Esta funcion hace lo que debe hacer. Mi problema es que no se como usarla. Les muestro como lo estoy haciendo:
Cita:
SELECT C.Nro, C.Nombre, (concatProductos C.Nro) [Productos]
FROM Clientes C
INNER JOIN Productos P ON C.Nro=P.Nro
WHERE ...
Esto es solo un ejemplo, pero la pregunta es como se deben usar las funciones? En todo caso, cual es la forma adecuada de solucionar este problema? Debo tener todo en un sp?
Gracias por su colaboracion!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 19/04/2007, 09:05
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Como unificar (concatenar) registros de una columna

si la funcion es concatProductos, quedaria como sigue...


Código:
SELECT C.Nro, C.Nombre, dbo.concatProductos(C.Nro) [Productos]
FROM Clientes C
INNER JOIN Productos P ON C.Nro=P.Nro
WHERE ...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 19/04/2007 a las 11:20
  #6 (permalink)  
Antiguo 19/04/2007, 10:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Re: Como unificar (concatenar) registros de una columna

Muchas gracias Andres!
Solo me faltaba poner dbo.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
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 19:58.