Агрегат SQL при объединении таблиц

У меня есть (временная) таблица, которая содержит записи студентов.
Есть еще одна таблица, в которой указаны учащиеся, по каким предметам.
Я хотел бы обновить таблицу учеников, включив в нее предметы, как показано ниже.

StudentID   Name    Subjects
1           Ryan    
2           James   

StudentID   Subject 
1           Maths   
1           Science 
2           History 

StudentID   Name    Subjects
1           Ryan    Maths, Science
2           James   History

Я пробовал это, но он обновляется только с первой найденной записью. Агрегация не произойдет.

declare @Subjects NVARCHAR(max) = ''

UPDATE #Students
SET Subjects = (@Subjects + CASE @Subjects WHEN '' THEN '' ELSE '; ' END + ISNULL(StudentSubjects.Subject,' '))
FROM #Students 
    INNER JOIN StudentSubjects ON #Students.StudentID = StudentSubjects.StudentID

SQL Server 2008 R2.
РЕДАКТИРОВАТЬ:
Я обновляю временную таблицу внутри хранимой процедуры, которая будет отображаться в наборе результатов. Не обновляет фактические данные.

1 ответ

Я надеюсь, что следующий запрос будет работать для вас

UPDATE #Students
SET Subjects = STUFF((SELECT ','+Subject From StudentSubjects b WHERE b.StudentID=a.StudentID 
For XML PATH ('')),1,1,'') 
from #Students a
Другие вопросы по тегам