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

Cách nối văn bản từ nhiều hàng thành một chuỗi văn bản trong SQL Server

Nếu bạn đang sử dụng SQL Server 2017 hoặc Azure, hãy xem câu trả lời Mathieu Renda.

Tôi đã gặp sự cố tương tự khi tôi đang cố gắng tham gia hai bảng với các mối quan hệ một-nhiều. Trong SQL 2005, tôi thấy rằng XML PATH phương thức có thể xử lý việc nối các hàng rất dễ dàng.

Nếu có một bảng được gọi là STUDENTS

SubjectID       StudentName
----------      -------------
1               Mary
1               John
1               Sam
2               Alaina
2               Edward

Kết quả tôi mong đợi là:

SubjectID       StudentName
----------      -------------
1               Mary, John, Sam
2               Alaina, Edward

Tôi đã sử dụng T-SQL sau :

SELECT Main.SubjectID,
       LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
    (
        SELECT DISTINCT ST2.SubjectID, 
            (
                SELECT ST1.StudentName + ',' AS [text()]
                FROM dbo.Students ST1
                WHERE ST1.SubjectID = ST2.SubjectID
                ORDER BY ST1.SubjectID
                FOR XML PATH ('')
            ) [Students]
        FROM dbo.Students ST2
    ) [Main]

Bạn có thể làm điều tương tự theo cách nhỏ gọn hơn nếu bạn có thể nối các dấu phẩy ở đầu và sử dụng substring bỏ qua câu hỏi đầu tiên, do đó bạn không cần thực hiện một truy vấn phụ:

SELECT DISTINCT ST2.SubjectID, 
    SUBSTRING(
        (
            SELECT ','+ST1.StudentName  AS [text()]
            FROM dbo.Students ST1
            WHERE ST1.SubjectID = ST2.SubjectID
            ORDER BY ST1.SubjectID
            FOR XML PATH ('')
        ), 2, 1000) [Students]
FROM dbo.Students ST2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu các biểu thức bảng phổ biến trong SQL Server

  2. Phân tích cú pháp XML thành SQL Server

  3. Trình nghe thay đổi cơ sở dữ liệu SQL Server C #

  4. Mục đích sử dụng OPTION (MAXDOP 1) trong SQL Server là gì?

  5. Thay đổi một hàm có giá trị bảng trong SQL Server