Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak połączyć tekst z wielu wierszy w jeden ciąg tekstowy w SQL Server

Jeśli korzystasz z SQL Server 2017 lub Azure, zobacz odpowiedź Mathieu Renda.

Miałem podobny problem, gdy próbowałem połączyć dwa stoły w relacjach jeden-do-wielu. W SQL 2005 odkryłem, że XML PATH metoda bardzo łatwo radzi sobie z łączeniem wierszy.

Jeśli istnieje tabela o nazwie STUDENTS

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

Oczekiwany wynik to:

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

Użyłem następującego T-SQL :

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]

Możesz zrobić to samo w bardziej zwięzły sposób, jeśli możesz połączyć przecinki na początku i użyć substring aby pominąć pierwsze, aby nie trzeba było wykonywać podzapytania:

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. Zapytanie SQL Server Xml z wieloma przestrzeniami nazw

  2. SQL Recursive CTE:Znajdowanie obiektów połączonych przez właściwość

  3. Wewnętrzne siedem sortowań SQL Server – część 1

  4. Lista funkcji daty i czasu w SQL Server (T-SQL)

  5. Dlaczego zawsze wolimy używać parametrów w instrukcjach SQL?