sql >> Database >  >> RDS >> Sqlserver

Hoe tekst uit meerdere rijen samen te voegen tot een enkele tekenreeks in SQL Server

Zie het antwoord van Mathieu Renda als u SQL Server 2017 of Azure gebruikt.

Ik had een soortgelijk probleem toen ik probeerde twee tabellen samen te voegen met een-op-veel-relaties. In SQL 2005 vond ik dat XML PATH methode kan de aaneenschakeling van de rijen heel gemakkelijk aan.

Als er een tabel is met de naam STUDENTS

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

Resultaat dat ik verwachtte was:

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

Ik gebruikte de volgende 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]

Je kunt hetzelfde op een compactere manier doen als je de komma's aan het begin kunt samenvoegen en substring kunt gebruiken om de eerste over te slaan zodat u geen subquery hoeft te doen:

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. MariaDB MaxScale Load Balancing op Docker:Beheer:deel twee

  2. SQLiteAssetHelper:Kan de database niet openen om te schrijven (zal alleen-lezen proberen)

  3. Fatale fout:oproep naar niet-gedefinieerde functie sqlsrv_connect() in C:\xampp\htdocs

  4. Hoe kunnen meerdere rijen worden samengevoegd tot één in Oracle zonder een opgeslagen procedure te maken?