SQL 将一列多行数据合并为一行
原表数据:
期望结果:
使用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格式。
最新文章
- 自定义view(一)
- set和map的简单用法
- DOM_01之树及遍历
- webView文本长按显示英文
- Appium移动自动化测试(四)--one demo
- AFNetworking使用方法
- javascript 毫秒转日期 日期时间转毫秒
- Qt入门(15)——使用窗口部件
- Nginx 配置指令的执行顺序(六)
- Self referencing loop detected with type
- DotNetBar教程
- asp.net或者MVC定时自动执行某操作
- 压力(性能)测试及jmeter的使用
- Centos7服务器中通过编译源码安装MySQL
- JQuery Tree插件
- jdk1.8的项目在jdk1.7的环境下运行
- MacOS的多重启动工具
- 腾讯云服务器部署 django项目整个流程
- poj2078 Matrix(DFS)
- Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行
热门文章
- decode 横竖转换
- idea中使用thymeleaf标签时有红色的波浪线怎么去掉
- 2019.01.19 codeforces343D.Water Tree(树剖+ODT)
- __getitem__()、__setitem__()与__delitem__()
- B-论文一些好的句子
- SQL之GROUP BY 语句
- 将excel中的数据填入word模板中-VBA
- BZOJ 3744 Gty的妹子序列 (分块 + BIT)
- python 基础_字符串9
- tokudb_tmp_dir导致的tokudb加载失败