Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите стойности на колони в една стойност, разделена със запетая

Вие маркирахте въпроса както с sql-server, така и с plsql, така че ще дам отговори както за SQL Server, така и за Oracle.

В SQL Server можете да използвате FOR XML PATH за свързване на няколко реда заедно:

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;

Вижте SQL Fiddle с демонстрация .

В Oracle 11g+ можете да използвате LISTAGG :

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

Вижте SQL Fiddle с демонстрация

Преди Oracle 11g можете да използвате wm_concat функция:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на клауза HAVING в оператор UPDATE

  2. Има ли тест IF EXISTS за свързан сървър?

  3. проблем с дизайна на базата данни при добавяне на нови колони към таблица от приложение

  4. Контролни точки на базата данни в SQL Server

  5. 5 предимства на проактивното наблюдение на ефективността на базата данни