• 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)

     

  • 相关阅读:
    常见局域网类别
    精确率,召回率,准确率
    create-react-app创建第一个react程序_windows8.1
    编码与解码
    深度学习---嵌套简记
    反向传播算法简记
    MarkDown语法简记
    Vscode中的配置文件的作用简述
    wireshark 更好的查看TCP协议的数据,跟踪tcp流程
    wireshark 基础,颜色规则,过滤条件使用与多条过滤
  • 原文地址:https://www.cnblogs.com/wrzszhaowei/p/4682798.html
Copyright © 2020-2023  润新知