values results how concatenate concatenar sql sql-server sql-server-2005 concatenation sql-server-group-concat

how - sql server concat select results



SQL, ¿Cómo concatenar resultados? (7)

Actualmente tengo una consulta SQL que devuelve varios campos. Necesito uno de los campos para ser efectivamente una sub consulta que.

El problema en detalle:

Si tengo una tabla X con dos columnas, ModuleID y digo ModuleValue, ¿cómo puedo escribir una consulta SQL para tomar los resultados y concatenarlos en un campo?

EG Resultados devueltos de

(SELECT ModuleValue FROM Table_X WHERE ModuleID=@ModuleID)

Valor 1

Valor 2

Valor 3

...

Necesito devolver el resultado de esta manera (como una sola fila, a diferencia de lo anterior):

Valor 1, Valor 2, Valor 3

¿Hay un método simple de concatenación que podría ser usuario?

EDITAR:

DB es MS TSQL (2005)


Con MSSQL puedes hacer algo como esto:

declare @result varchar(500) set @result = '''' select @result = @result + ModuleValue + '', '' from TableX where ModuleId = @ModuleId


Depende de la base de datos que estés usando. MySQL, por ejemplo, es compatible con la función group_concat (no estándar). Para que pudieras escribir:

SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE ModuleID=@ModuleID

Sin embargo, Group-concat no está disponible en todos los servidores de bases de datos.


En SQL Server 2005 y superiores, podrías hacer algo como esto:

SELECT (SELECT ModuleValue + '','' FROM dbo.Modules FOR XML PATH('''') ) FROM dbo.Modules WHERE ModuleID = 1

Esto debería darte algo como lo que estás buscando.

Bagazo


En mi opinión, usar STRING_AGG( ... ) es la mejor solución:

Mas en:

https://.com/a/42778050/1260488


En mysql usarías la siguiente función:

SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE ModuleID=@ModuleID

No estoy seguro de qué dialecto estás usando.


Este excluye automáticamente la coma final, a diferencia de la mayoría de las otras respuestas.

DECLARE @csv VARCHAR(1000) SELECT @csv = COALESCE(@csv + '','', '''') + ModuleValue FROM Table_X WHERE ModuleID = @ModuleID

(Si la columna ModuleValue no es un tipo de cadena, es posible que deba convertirla en un VARCHAR ).


Pequeña actualización en Marc tendremos "," adicional al final. Usé la función de cosas para eliminar el punto y coma extra.

SELECT STUFF(( SELECT '','' + ModuleValue AS ModuleValue FROM ModuleValue WHERE ModuleID=@ModuleID FOR XML PATH('''') ), 1, 1, '''' )