T_SQL 将一列多行数据合并为一行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T_SQL 将一列多行数据合并为一行相关的知识,希望对你有一定的参考价值。

T_SQL 将一列多行数据合并为一行

SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象。

Table:SC

Student

Course

张三

大学语文

李四

大学语文

张三

书法鉴赏

张三

音乐欣赏

李四

电影赏析

 

期望得到的结果:

Student

Course

张三

大学语文,书法鉴赏,音乐欣赏

李四

大学语文,电影赏析

 

IF OBJECT_ID(N’SC’) IS NOT NULL

      BEGIN

            DROP TABLE SC

      END

ELSE

      BEGIN

            CREATE TABLE SC

            (

                  Student NVARCHAR(50),

                  Course NVARCHAR(50)

            )

            INSERT INTO SC

            SELECT N’张三’,N’大学语文’ UNION ALL

            SELECT N’李四’,N’大学语文’ UNION ALL

            SELECT N’张三’,N’书法鉴赏’ UNION ALL

            SELECT N’张三’,N’音乐赏析’ UNION ALL

            SELECT N’李四’,N’电影赏析’           

      END

GO

 (5 row(s) affected)

s

方法一:用户自定义函数

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)

 技术分享

 

链接:

  1. Stuff()函数http://msdn.microsoft.com/zh-cn/library/ms188043.asp
转载:http://www.cnblogs.com/smalleyes/archive/2012/03/08/2385658.html

 



以上是关于T_SQL 将一列多行数据合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

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

如何快速批量将多行的内容,变成一行?

怎样将多行数字合并到一行中?

关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中

SQL 多行多列数据清洗合并为一行

SQL 怎么将一列中的数据按一个分隔符分成多列显示