连接表时SQL聚合

时间:2014-09-23 22:14:05

标签: sql sql-server-2008 aggregate-functions group-concat sql-server-group-concat

我有一个(临时)表格,其中包含学生记录 还有另一张表格,其中包含哪些学生注册了哪些科目 我想更新学生表,其中聚合的主题如下所示。

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 个答案:

答案 0 :(得分:1)

我希望以下查询适合您

UPDATE #Students
SET Subjects = STUFF((SELECT ','+Subject From StudentSubjects b WHERE b.StudentID=a.StudentID 
For XML PATH ('')),1,1,'') 
from #Students a