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)

     

  • 相关阅读:
    深入浅出数据库索引原理
    Mysql读写分离原理及主众同步延时如何解决
    数据库连接池实现原理
    MySQL 大表优化方案(长文)
    js-ajax-03
    js-ajax-04
    js-ajax-02
    js-ajax-01
    获取html对象方式
    js-事件总结
  • 原文地址:https://www.cnblogs.com/wrzszhaowei/p/4682798.html
Copyright © 2011-2022 走看看