0

我有一个包含学生记录的(临时)表格。
还有另一张表,其中包含哪些学生为哪些科目注册。
我想更新学生表,并将主题聚合到其中,如下所示。加入表格时的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。
编辑:
我正在更新将在结果集中呈现的存储过程内的临时表。 不更新实际数据

+5

就是这样一个坏主意,我不想告诉你如何做到这一点。您不应该在列中存储逗号分隔列表。 – 2014-09-23 22:16:27

+3

您不应将这些结果永久存储在数据库中。你可以使用这个问题的技术创建一个视图 - http://stackoverflow.com/questions/17591490/how-to-make-a-query-with-group-concat-in-sql-server – Bulat 2014-09-23 22:21:05

+0

可能的重复的[How使用GROUP BY连接SQL Server中的字符串?](http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server) – 2014-09-23 22:26:04

回答

1

我希望下面的查询会为你工作

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