Considere una tabla de base de datos que contiene nombres, con tres filas:
Peter
Paul
Mary
¿Hay alguna manera fácil de convertir esto en una sola cadena de Peter, Paul, Mary
?
Considere una tabla de base de datos que contiene nombres, con tres filas:
Peter
Paul
Mary
¿Hay alguna manera fácil de convertir esto en una sola cadena de Peter, Paul, Mary
?
Utilice COALESCE
:
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
Sólo una explicación (ya que esta respuesta parece recibir visitas con relativa regularidad):
1) No es necesario inicializar @Names
con un valor de cadena vacía.
2) No es necesario quitar un separador extra al final.
La solución anterior dará resultados incorrectos si una fila tiene un NULL Valor del nombre (si hay un NULL El NULL hará @Names
NULL después de esa fila, y la siguiente fila comenzará de nuevo como una cadena vacía. Se arregla fácilmente con una de las dos soluciones:
DECLARE @Names VARCHAR(8000) SELECT @Names = COALESCE(@Names + ', ', '') + Name FROM People WHERE Name IS NOT NULL
o:
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') +
ISNULL(Name, 'N/A')
FROM People
Dependiendo del comportamiento que desee (la primera opción sólo filtra los *NULL*, la segunda los mantiene en la lista con un mensaje de marcador [sustituya 'N/A' por lo que sea apropiado para usted]).
En Sql Server 2005 ...
SELECT Stuff(
(SELECT N', ' + Name FROM Names FOR XML PATH(''),TYPE)
.value('text()[1]','nvarchar(max)'),1,2,N'')
En MySQL existe una función, GROUP_CONCAT() que permite concatenar los valores de varias filas. Ejemplo:
SELECT 1 AS a, GROUP_CONCAT(name ORDER BY name ASC SEPARATOR ', ') AS people
FROM users
WHERE id IN (1,2,3)
GROUP BY a
Las matrices de Postgres son increíbles. Ejemplo:
Cree algunos datos de prueba:
postgres=# \c test
You are now connected to database "test" as user "hgimenez".
test=# create table names (name text);
CREATE TABLE
test=# insert into names (name) values ('Peter'), ('Paul'), ('Mary');
INSERT 0 3
test=# select * from names;
name
-------
Peter
Paul
Mary
(3 rows)
Agrégalos en un Array:
test=# select array_agg(name) from names;
array_agg
-------------------
{Peter,Paul,Mary}
(1 row)
Convierte la matriz en una cadena delimitada por comas:
test=# select array_to_string(array_agg(name), ', ') from names;
array_to_string
-------------------
Peter, Paul, Mary
(1 row)
DONE
Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.