Usar la función COALESCE para hacer valores separados por comas

Tengo una tabla ( EMP ) Sé que usando la función COALESCE podemos obtener los valores de cualquier columna de esta manera

 23,23,45,34 SELECT OfferID FROM Emp where EmpID= 23 

pero no obtengo la syntax para lograr esto

Cualquier ayuda sería excelente para resolver este problema.

 DECLARE @List VARCHAR(8000) SELECT @List = COALESCE(@List + ',', '') + CAST(OfferID AS VARCHAR) FROM Emp WHERE EmpID = 23 SELECT @List 

No se garantiza que este enfoque para la concatenación agregada funcione . Si está al menos en SQL Server 2005, se prefieren los conjuntos XML PATH o CLR.

El artículo definitivo sobre el tema es Concatenating Row Values ​​en Transact-SQL

Descripción

He hecho esto usando COALESCE en el pasado también, pero sugiero otro enfoque porque no necesitas una variable. Use la función STUFF T-SQL STUFF para hacer esto.

Muestra

 SELECT STUFF(( select ','+ cast(OfferID as nvarchar(255)) from Emp b WHERE a.EmpID= b.EmpID FOR XML PATH('') ),1,1,'') AS COLUMN2 FROM Emp a GROUP BY a.EmpID 

Más información

STUFF (Transact-SQL)

Descripción

La solución dknaack tiene algunos inconvenientes cuando el texto contiene algunos caracteres XML como < , que están html-entitized como < . Esto se puede resolver usando la directiva TYPE que envía la respuesta como xml, luego extrae el value bruto como una cadena.

Hay muchas más soluciones al problema en este artículo: Concatenar valores de filas en T-SQL

Muestra

 SELECT STUFF(( select ','+ cast(OfferID as nvarchar(255)) from Emp b WHERE a.EmpID= b.EmpID FOR XML PATH(''), TYPE ).value('.', 'varchar(max)') ,1,1,'') AS COLUMN2 FROM Emp a GROUP BY a.EmpID 

Isnull Function también nos dará el mismo resultado

 DECLARE @List VARCHAR(8000) SELECT @List = ISNULL(@List + ',', '') + CAST(OfferID AS VARCHAR) FROM Emp WHERE EmpID = 23 SELECT @List