SQL para Multiples filas en una sola columna


Cuando necesitamos unir el resultado de múltiples filas en una sola columna tenemos una solución práctica con XML PATH y STUFF. Funciona desde SQL Server 2005 en adelante.

Ejemplo con 1 tabla Clientes

Clientes
Clientes

Mediante una intruccion select queremos obtener esto:

Resultado
Resultado

Simplemente escribimos:

SELECT a.ciudad
	,stuff((
			SELECT ', ' + b.Nombre
			FROM #Clientes b
			WHERE b.Ciudad = a.Ciudad
			FOR XML PATH('')
			), 1, 1, '') Nombres
FROM #Clientes a
GROUP BY a.Ciudad
ORDER BY a.Ciudad

Ahora con 2 tablas, añadimos una tabla Ciudades con la descripción de cada ciudad:

Ciudades
Ciudades

Ahora vamos a mostrar el siguiente resultado:

Resultado 2 tablas
Resultado 2 tablas

Escribimos la siguiente instrucción:

SELECT a.Cod
	,a.Descrip
	,stuff((
			SELECT ', ' + b.Nombre
			FROM #Clientes b
			WHERE b.Ciudad = a.Cod
			FOR XML PATH('')
			), 1, 1, '') Nombres
FROM #Ciudades a
GROUP BY a.Cod
	,a.Descrip
ORDER BY a.Descrip

Para entender como funciona debemos entender primero como funciona el XML PATH, para eso escribamos lo siguiente:

SELECT Nombre
FROM #Clientes
FOR XML PATH('')

Esto nos devuelve un XML de dicha columna, ahora lo que hacemos mediante el STUFF es concatenar el resultado de cada campo y separarlo por comas. A continuación el script para crear las tablas:

CREATE TABLE #Clientes (
	Cod VARCHAR(3)
	,Nombre VARCHAR(4)
	,Ciudad VARCHAR(6)
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'001'
	,'John'
	,'Cali'
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'002'
	,'Mago'
	,'Cali'
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'003'
	,'Soga'
	,'Cali'
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'004'
	,'Mega'
	,'Cali'
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'005'
	,'Luga'
	,'Bogota'
	)

INSERT INTO #Clientes (
	Cod
	,Nombre
	,Ciudad
	)
VALUES (
	'006'
	,'Maka'
	,'Bogota'
	)

CREATE TABLE #Ciudades (
	Cod VARCHAR(6)
	,Descrip VARCHAR(40)
	)

INSERT INTO #Ciudades (
	Cod
	,Descrip
	)
VALUES (
	'Cali'
	,'La Capital mundial de la Salsa'
	)

INSERT INTO #Ciudades (
	Cod
	,Descrip
	)
VALUES (
	'Bogota'
	,'2600mts mas cerca de las estrellas'
	)

7 thoughts on “SQL para Multiples filas en una sola columna”

  1. I think this is among the most important information for me.
    And i’m glad reading your article. But want to remark on some general things, The website style is perfect, the articles
    is really nice : D. Good job, cheers

  2. Superb blog! Do you have any tips and hints for aspiring writers?
    I’m hoping to start my own site soon but I’m a little
    lost on everything. Would you recommend starting with a free platform like WordPress or go for a paid option?
    There are so many choices out there that I’m totally confused
    .. Any tips? Cheers!

    1. Just start writing in a free blog, like this one: wordpress.com or the google one: blogspot.com there is a lot more but I only use these two. The page itself for each blog allows you to post easily. Take a chance and let me know how is it going.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s