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, '''' )