SQLServer – concatenare i dati di più righe in una stringa singola

Da SQLServer con la seguente query selezioniamo una lista di utenti dalla tabella Users  e per ognuno di essi stampiamo sulla stessa riga nella colonna UsersRoles gli n ruoli associati all’utente:

SELECT Users.id,Users.Name,Users.LastName
  (SELECT 
    (
    STUFF 
      (
        (
          SELECT ', ' + Roles.description FROM Roles WHERE Roles.UserID=Users.id
          FOR XML PATH('')
        ), 1, 2, ''
      )
    ) AS StringValue
  ) AS UsersRoles
FROM Users

SELECT ‘,’ + ColumnName FOR XML PATH(

) genera un set di valore separati da virgola.

STUFF(...,1,1,'')

Rimuove la prima virgola e spazio.