每行SQL Server CSV

时间:2011-11-22 04:40:28

标签: sql-server tsql

我有数据:

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

我希望查询获取输出数据,如下所示。

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

2 个答案:

答案 0 :(得分:2)

在SQL Server 2005+中,最简单的方法是使用FOR XML技巧:

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

答案 1 :(得分:0)

在SQLServer2000 +中,您可以使用以下

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