Агрегат 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