原表数据:

期望结果:

使用STUFF + FOR XML PATH即可实现以上效果

执行以下SQL:

SELECT DISTINCT Name, STUFF((SELECT ',' + Course FROM Student WHERE Name = T.Name FOR XML PATH('')), 1, 1, '') AS Course FROM Student AS T

可以看到输出结果与期望结果相同:

STUFF语法

STUFF ( character_expression , start , length , replaceWith_expression )  

参数

character_expression
字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

start
一个整数值,指定删除和插入的开始位置。 如果 start 为负或为零,则返回空字符串。 如果 start 的长度大于第一个 character_expression,则返回空字符串。 start 的类型可以是 bigint。

length
一个整数,指定要删除的字符数。 如果 length 为负,则返回空字符串。 如果 length 的长度大于第一个 character_expression,则最多可以删除到最后一个 character_expression 中的最后一个字符。 如果 length 为零,则在字符串中第一个字符之前插入内容。 length 的类型可以是 bigint。

replaceWith_expression
字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。 此表达式从 start 开始替换 length 个字符的 character_expression。 如果 replaceWith_expression 为 NULL,则在不插入任何内容的情况下删除字符。

FOR XML PATH

其实FOR XML PATH就是将查询结果集以XML形式展现,有了它我们可以简化查询语句以实现一些以前需要借助函数活存储过程才能完成的工作。以上面的表格为例,执行以下SQL:

SELECT * FROM Student FOR XML PATH

结果如下:

执行以下SQL:

SELECT * FROM Student FOR XML PATH('')

结果如下:

由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML格式。

SQL 将一列多行数据合并为一行的更多相关文章

  1. T SQL 将一列多行数据合并为一行

    SQL Server 在进行数据迁移和报表处理的时候遇到将一列多行数据拼接为一个字符串的情形,查找相关的资料整理如下,提供两种方法. Table:SC Student Course 张三 大学语文 李 ...

  2. SQL 将一列多行数据合并为一行 FOR XML PATH

    FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻.现在我要介绍的FOR XML PATH的"另类"用法. 首先,我们先来看看它的正常用法 ...

  3. T_SQL 将一列多行数据合并为一行

    SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象 ...

  4. SQL将多行数据合并成一行【转】

    转:https://blog.csdn.net/AntherFantacy/article/details/83824182 今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,照 ...

  5. 使用Notepad++将多行数据合并成一行

    1.按Ctrl+F,弹出“替换”的窗口: 2.选择“替换”菜单: 3.“查找目标”内容输入为:\r\n: 4.“替换为”内容为空: 5.“查找模式”选择为正则表达式: 6.设置好之后,点击“全部替换” ...

  6. SQL SERVER 如何把1列多行数据 合并成一列显示

    示例 修改前:1列多行数据 修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别,     名称 = (         stuff(            ...

  7. SQL SERVER将多行数据合并成一行(转载)

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name A ...

  8. SQL实用技巧:如何将表中某一列的部分数据合并到一行中

    select *,stuff(select ‘,’ + fieldname from table1 for xml path(”)),1,1,”)  as  field from table2 for ...

  9. SQL SERVER将多行数据合并成一行(转)

    1)比如表中有三列数据: 2)执行如下查询: 1 SELECT [USER_NAME], [USER_ACCOUNT] 2 , [ROLE_NAME] = stuff(( 3 SELECT ',' + ...

随机推荐

  1. kbmmw 5.04 发布

    增加了一大波功能,消灭了一大堆问题,也肯定引进了一大票BUG.We are happy to announce the release of our latest version of kbmMW. ...

  2. rbenv安装本地ruby安装包

    cd .rbenv mkdir cache #把安装包拷进cache cd cache rbenv install 版本号

  3. shell入门练习

    **定义局部变量, 局部变量在退出Shell客户端时会失效** **单引号:原样输出** **双引号:如果里面有变量,会输出变量** **没有引号:输出变量** 可以在调用脚本的时候给脚本传递参数,脚 ...

  4. 2019.02.09 bzoj2440: [中山市选2011]完全平方数(二分答案+容斥原理)

    传送门 题意简述:qqq次询问(q≤500)(q\le500)(q≤500),每次问第kkk个不被除111以外的完全平方数整除的数是多少(k≤1e9)(k\le1e9)(k≤1e9). 思路:考虑二分 ...

  5. 一个WCF 数据序列化问题

    public class EMMPBaseMsg { public String Data { get; set; } public DateTime AddTime { get; set; } pu ...

  6. java Concurrent包学习笔记(七):ConcurrentHashMap

    (注意:以下讲解的ConcurrentHashMap是jdk 1.8的) 一.ConcurrentHashMap的数据结构 ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上 ...

  7. Django开发环境搭建

    最近笔者使用了Django框架作为项目model层的数据对象处理. 关于Django的开发环境,需要安装以下内容: 1.安装python 2.安装VCForPython27.msi 3.安装pycha ...

  8. svn本地如何切换账号

    SVN如何切换账号   在使用svn更新或提交数据时需要输入用户名和密码,在输入框中可以选择是否记录,以便下次操作无需再次输入用户名和密码: 要切换其他用户名时,需要删除已记录用户的数据,在电脑桌面上 ...

  9. 转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty("user.dir")的理解

    唉,读取个文件,也就是在项目里面去获得配置文件的目录,然后,变成文件,有事没事,总是出个 FileNotFoundException  系统找不到指定的文件,气死人啦. 还有就是:System.get ...

  10. hdu 1059

    题目大意:就是有价值1.2.3.4.5.6的硬币各多少个,然后让你判断能否把他们分成价值相等的两部分. 题目思路:目测dp,一看果然dp,完全背包,需要剪枝,硬币个数为容量,下标为value,用一个b ...