1701 votos

Concatenar el número de filas en una única cadena de texto?

Considere la posibilidad de una tabla de base de la celebración de los nombres, con tres filas:

Peter
Paul
Mary

Hay una manera fácil de convertir esto en una sola cadena de Peter, Paul, Mary?

949voto

Chris Shaffer Puntos 18066

Uso COALESCE:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name 
FROM People

Sólo algunos explicación (ya que esta respuesta parece ser relativamente regular de puntos de vista):

  • Se unen en realidad es sólo un útil truco que logra dos cosas:

1) No es necesario inicializar @Names con un valor de cadena vacía.

2) No hay necesidad de que la tira fuera un extra de separador al final.

  • La solución anterior dará resultados incorrectos si una fila tiene un NULO valor de Nombre (si hay un NULL, NULL hará @Names NULL después de que la fila y la fila de al lado va a empezar de nuevo como una cadena vacía de nuevo. Fija fácilmente con una de 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 de lo que el comportamiento que usted desea (la primera opción de los filtros *NULL*s, la segunda opción que les mantiene en la lista con un marcador de mensajes [replace 'N/A', con lo que es adecuado para usted]).

334voto

jens frandsen Puntos 709

Un método no ha demostrado a través de los datos XML() comando en MS SQL Server es:

Suponga que la tabla se llama NameList con una columna llamada FName,

select FName + ', ' as 'data()' 
from NameList 
for xml path('')

devuelve: "Pedro, Pablo, María, ".

Sólo la coma adicional se debe de tratar.

267voto

Steven Chong Puntos 320

En SQL Server 2005 ...

SELECT Stuff(
  (SELECT N', ' + Name FROM Names FOR XML PATH(''),TYPE)
  .value('text()[1]','nvarchar(max)'),1,2,N'')

111voto

Darryl Hein Puntos 33819

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

Iteramos.com

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.

Powered by:

X