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)

     

  • 相关阅读:
    make[1]: *** [/workopenwrt/trunk/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/stamp/.tools_install_nnnnn] Error 2 make[1]: Leaving directory `/work/openwrt/trunk' make: *** [world]
    安卓端与开发板通信
    openwrt串口的使用
    .OpenWrt驱动程序Makefile的分析概述 、驱动程序代码参考、以及测试程序代码参考
    openwrt系统之字符设备驱动软件包加载、测试程序加载
    cc2530串口通信流程
    cc2530操作任务系统初始化分析
    总结OpenWrt系统基本操作方法
    Zigbee协议栈OSAL层API函数【转载】
    cc2530启动流程---广播发送数据
  • 原文地址:https://www.cnblogs.com/wrzszhaowei/p/4682798.html
Copyright © 2011-2022 走看看