sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan sammenkædes tekst fra flere rækker til en enkelt tekststreng i SQL Server

Hvis du er på SQL Server 2017 eller Azure, se svar fra Mathieu Renda.

Jeg havde et lignende problem, da jeg prøvede at forbinde to borde med en-til-mange-forhold. I SQL 2005 fandt jeg den XML PATH metode kan håndtere sammenkædningen af ​​rækkerne meget let.

Hvis der er en tabel kaldet STUDENTS

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

Resultatet, jeg forventede, var:

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

Jeg brugte følgende 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]

Du kan gøre det samme på en mere kompakt måde, hvis du kan sammensætte kommaerne i begyndelsen og bruge substring for at springe den første over, så du ikke behøver at lave en underforespørgsel:

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. Row Goals, Del 4:Anti Join Anti Pattern

  2. Hvordan pg_typeof() virker i PostgreSQL

  3. Sådan installeres SQL Server på en M1 Mac (ARM64)

  4. ORA-06502:PL/SQL:numerisk eller værdifejl:tegnstrengbuffer for lille