Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere i valori delle colonne in un valore separato da virgole

Hai taggato la domanda sia con sql-server che con plsql, quindi fornirò risposte sia per SQL Server che per Oracle.

In SQL Server puoi usare FOR XML PATH per concatenare più righe insieme:

select distinct t.[user],
  STUFF((SELECT distinct ', ' + t1.department
         from yourtable t1
         where t.[user] = t1.[user]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') department
from yourtable t;

Vedi SQL Fiddle con demo .

In Oracle 11g+ puoi usare LISTAGG :

select "User",
  listagg(department, ',') within group (order by "User") as departments
from yourtable
group by "User"

Vedi SQL Fiddle con demo

Prima di Oracle 11g, potevi utilizzare wm_concat funzione:

select "User",
  wm_concat(department) departments
from yourtable
group by "User"