ListAGG en SQLSERVER

Estoy intentando agregar un campo 'STRING' en SQLServer. Me gustaría encontrar la misma function que LISTAGG en Oracle.

¿Sabes cómo hacer la misma function u otro método?

Por ejemplo,

Field A | Field B 1 | A 1 | B 2 | A 

Y me gustaría que el resultado de esta consulta sea

 1 | AB 2 | A 

En SQL Server puede usar FOR XML PATH para get el resultado:

 select distinct t1.FieldA, STUFF((SELECT distinct '' + t2.FieldB from yourtable t2 where t1.FieldA = t2.FieldA FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,0,'') data from yourtable t1; 

Ver SQL Fiddle con demostración

En Sqlserver:

 SELECT FieldA , STUFF(( SELECT ','+ FieldB FROM TableName a WHERE b.FieldA = a.FieldA FOR XML PATH('')),1 ,1, '') Members FROM TableName b GROUP BY FieldA; 

En Mysql:

 SELECT FieldA, GROUP_CONCAT(FieldB) AS Members FROM TableName GROUP BY FieldA ORDER BY FieldA; 

En Oracle:

 SELECT FieldA, LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldA) AS Members FROM TableName GROUP BY FieldA; 

En SQL Server 2017 se agrega STRING_AGG :

 SELECT t.name,STRING_AGG (c.name, ',') AS csv FROM sys.tables t JOIN sys.columns c on t.object_id = c.object_id GROUP BY t.name ORDER BY 1 

Además, STRING_SPLIT es útil para el caso contrario y está disponible en SQL Server 2016