post icon

Concatenar filas en una sola fila con valores separados por comas con SQL

Constantemente me topo con personas del ambiente laboral o de foros que me preguntan como pueden pasar las filas que les retorna un select a una sola columna y fila separando los valores por comas, por eso hoy publico este post.

Para lograr esto existen muchas vías, unas más optimas o complejas que otras. No voy a exponer cada una de esas técnicas, pero si veremos una de las maneras más sencillas y eficientes hacerlo. El ejemplo está basado en TSQL con variables de tipo tabla, pero perfectamente puede aplicarse a cualquier tipo de tabla y a cualquier contexto semejante.

declare @personas table(id int, nombre nvarchar(50))
insert into @personas values(1, N'Maria');
insert into @personas values(1, N'Jose');
insert into @personas values(1, N'Marcos');
insert into @personas values(1, N'Natalia');
insert into @personas values(1, N'Romeo');

declare @nombres nvarchar(4000)
select @nombres = coalesce(@nombres + ', ', '') + p.nombre from @personas as p;

select @nombres;

Otra forma de conseguir el mismo resultado es como sigue:

 select
    stuff((
            select
                ', ' + nombre
            from
                @personas as p2
          for
            xml path('')
          ), 1, 1, '');

Y el resultado es el siguiente

resultset

Comentarios desde Facebook:

  1. avatar
    May McFly MEXICO Mozilla Firefox Windows
    3 septiembre 2016 at 14:05 #

    SELECT
    area,
    STUFF(
    (SELECT empleado+’, ‘
    FROM tb2
    WHERE area= a.area
    FOR XML PATH (”))
    , 1, 0, ”) AS [Campos Concatenados]
    FROM tb1 AS a
    GROUP BY area

Responder