Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erhalten Sie Spaltenwerte in einem durch Kommas getrennten Wert

Sie haben die Frage sowohl mit sql-server als auch mit plsql getaggt, daher werde ich Antworten sowohl für SQL Server als auch für Oracle geben.

In SQL Server können Sie FOR XML PATH verwenden um mehrere Zeilen miteinander zu verketten:

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;

Siehe SQL Fiddle mit Demo .

In Oracle 11g+ können Sie LISTAGG verwenden :

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

Siehe SQL-Geige mit Demo

Vor Oracle 11g konnten Sie den wm_concat verwenden Funktion:

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