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