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)

     

  • 相关阅读:
    LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
    LeetCode 快乐数(Happy Number)
    Deep & Cross Network总结
    CTR预估之LR与GBDT融合
    近似最近邻算法-annoy解析
    FM与FFM深入解析
    LeetCode 222. 完全二叉树的节点个数(Count Complete Tree Nodes)
    js 时间与时间戳的转换
    table 样式美化
    c# string 和 byte[]数组之间转换
  • 原文地址:https://www.cnblogs.com/wrzszhaowei/p/4682798.html
Copyright © 2011-2022 走看看