Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách nhận các giá trị cột trong một giá trị được phân tách bằng dấu phẩy

Bạn đã gắn thẻ câu hỏi bằng cả sql-server và plsql, vì vậy tôi sẽ cung cấp câu trả lời cho cả SQL Server và Oracle.

Trong SQL Server, bạn có thể sử dụng FOR XML PATH để nối nhiều hàng với nhau:

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;

Xem SQL Fiddle với Demo .

Trong Oracle 11g +, bạn có thể sử dụng LISTAGG :

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

Xem SQL Fiddle with Demo

Trước Oracle 11g, bạn có thể sử dụng wm_concat chức năng:

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. Cơ sở dữ liệu Windows Azure SQL - Cột tự động tăng danh tính bỏ qua các giá trị

  2. Sử dụng mệnh đề OUTPUT để chèn giá trị không có trong INSERTED

  3. Tìm một chuỗi bằng cách tìm kiếm tất cả các bảng trong SQL Server

  4. SQL Server:xuất truy vấn dưới dạng tệp .txt

  5. SQL Server 2008 Open Master Key lỗi khi máy chủ vật lý thay đổi