随笔- 507  评论- 54  文章- 0 

T SQL 将一列多行数据合并为一行

  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)

  

posted on 2019-01-30 13:53  Now,DayBreak  阅读(147)  评论(0编辑  收藏