SQL Server 在进行数据迁移和报表处理的时候遇到将一列多行数据拼接为一个字符串的情形,查找相关的资料整理如下,提供两种方法。
Table:SC
Student | Course |
张三 | 大学语文 |
李四 | 大学语文 |
张三 | 书法鉴赏 |
张三 | 音乐欣赏 |
李四 | 电影赏析 |
期望得到的结果:
Student | Course |
张三 | 大学语文,书法鉴赏,音乐欣赏 |
李四 | 大学语文,电影赏析 |
一、用户自定义函数
CREATE FUNCTION FN_Merge (@Student NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @Course NVARCHAR(50)
SELECT @Course = ISNULL(@Course + ',','') + @Course
FROM SC
WHERE Student = @Student
RETURN @COURSE
END SELECT DISTINCT [Student],dbo.FN_Merge([Student]) AS Course
FROM [dbo].[SC]
结果:(2 row(s) affected)
二、使用 FOR XML PATH
SELECT DISTINCT [Student]
,STUFF(
(
SELECT ','+[Course]
FROM [dbo].[SC]
WHERE Student = A.Student
FOR XML PATH('')
)
,1,1,''
)AS Course
FROM [dbo].[SC] AS A
结果:(2 row(s) affected)