zoukankan      html  css  js  c++  java
  • 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)

     

  • 相关阅读:
    鳥哥的 Linux 私房菜——第十三章、学习 Shell Scripts(转发)(未完待续)
    鳥哥的 Linux 私房菜——第十六章、例行性工作排程 (crontab) (转发)(未完待续)
    RT-Thread ------ event 事件
    sscanf() ------ 获取字符串中的参数
    燃气热水器的调节
    Adobe Illustrator CC ------ AI脚本插件合集
    你真的理解CSS的linear-gradient?
    IDEA中Grep Console插件的安装及使用
    Windows下删除以.结尾文件夹的方法
    lwip库的发送和接收函数
  • 原文地址:https://www.cnblogs.com/wrzszhaowei/p/4682798.html
Copyright © 2011-2022 走看看