SQL Server CSV par ligne

J'ai des données comme:

StudentID | Course 1 | .NET 1 | SQL Server 1 | Ajax 2 | Java 2 | JSP 2 | Struts 

Je veux que la requête obtienne datatables de sortie Comme suit.

 StudentID | Course 1 | .NET, SQL Server, Ajax 2 | Java, JSP, Struts 

Dans SQL Server 2005+, la méthode la plus simple consiste à utiliser l'astuce FOR XML:

 SELECT StudentID, STUFF((SELECT ',' + Course FROM table t1 WHERE t1.StudentID = t.StudentID FOR XML PATH('')), 1, 1, '') FROM table t 

Dans SQLServer2000 +, vous pouvez utiliser les

 create table tbl (StudentID int, course varchar(10)) insert into tbl values (1,'.NET'),(1, 'SQL Server'), (1, 'Ajax'),(2,'Java'),(2,'JSP'),(2,'Struts') GO CREATE FUNCTION dbo.GetCourses(@id INTEGER) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @Result VARCHAR(MAX) SET @Result = '' SELECT @Result = @Result + [course] + ' ' FROM tbl WHERE StudentID = @id RETURN RTRIM(@Result) END GO SELECT DISTINCT StudentID, dbo.GetCourses(StudentID) FROM tbl GO drop table tbl drop function dbo.GetCourses