利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
T-sql 有一个for xml path('')的从句能把多行结果合并到一行,并成为xml 格式
比如有一张表tb有两列,其格式和数据为:
id value
—————
1 aa
1 bb
2 aaa
2 bbb
2 ccc
如果对其执行sql:
select id, value from tb for xml path('tbnode')
则返回的结果集仅为一行一列:
<tbnode><id>1</id><value>aa</value><id>1</id><value>bb</value>........<id>2</id><value>ccc</value></tbnode>
现在我们取巧一点, 省略path括号里的内容, 同时把这两列想办法变成匿名列,sql如下:
select id+'',value+'' from tb for xml path('')
那么返回结果如下(也是一个一行一列):
1aa1bb2aaa2bbb2ccc
基于这样的思路, 现在要对所有不同的ID的value进行合并,希望得到如下的结果集:
id value
—————
1 aa,bb
2 aaa,bbb,ccc
首先我们来构造右边一列:
sql如下:
select value+',' from tb where ID=1 for xml path('')
这样就可以得到 "aa,bb," 。但是最后面会多一个逗号,可以在外面再套一层select,并利用SUBSTRING()函数来去掉它。 在网上的其他方法中也有把逗号加在value前,然后用stuff函数来去掉最前面多余的逗号的,详见参考链接。substring的缺点是用len函数的时候还要再填一遍“select value+',' from tb where ID=1 for xml path('')“,会显得冗长。
最后完整的sql如下:
select id, valuelist=substring((select value+',' from tb where tb.id=a.id for xml path('')),1,len((select value+',' from tb as b where b.id=a.id for xml path('')))-1) from tb as a group by id
或者用stuff:
select id,valuelist=stuff((select ','+value from tb as b where b.ID=a.ID for xml path('')),1,1,'') from tb as a group by id
转载于:https://www.cnblogs.com/lgx5/p/9367915.html
利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符相关推荐
- SQL中的for xml path
点击关注"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server 20 ...
- sql查询语句for xml path语法
[原地址] for xml path作用:将多行的查询结果,根据某一些条件合并到一行. 例:现有一张表 执行下面语句 select Department,(SELECT Employee+',' FR ...
- (4.28)for xml path 在合并拆分上的作用演示
for xml path 用于合并与拆分 1.合并 很多时候需要在SQL Server中创建逗号分隔列表.这可以使用SQL Server的DOR XML PATH功能完成.与select语句一起使用时 ...
- sqlserver的for xml path和mysql的group_concat的区别
前几天遇到公司更换数据库,将sqlserver更改为mysql,更改完后发现后台sql报错,是一个关于多行转换成一行的SQL问题,度娘告知for xml path只适用于sqlserver,并不适用于 ...
- ORACLE纯SQL实现多行合并一行
ORACLE纯SQL实现多行合并一行 项目中遇到一个需求,需要将多行合并为一行. 表结构如下: NAME Null Type ...
- sql server 利用 For Xml Path('') 多行数据拼接成一个字符串
注意:这里有一种可能被弃用的方法,微软真他么坑死了,我的版本是19的,以前可以用,现在不行了 方法一(弃用): SELECT(SELECT CAST(bs_id AS VARCHAR(50)) + ' ...
- 使用 FOR XML PATH 合并SQL Server查询结果的重复行
参考资料: http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html http://www.cnblogs.com/code ...
- SQL Server FOR XML PATH 语句的应用
在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. DECLARE @TempTable table(UserID int , Use ...
- SQL Server FOR XML PATH 语句的应用---列转行
经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法. 在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应 ...
最新文章
- 剥开比原看代码17:比原是如何显示交易的详细信息的?
- ngx_lua_API 指令详解(三)怎样理解 cosocket指令
- 【转载】如何做一份突出的PPT
- rabbitmq怎样确认是否已经消费了消息_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递...
- 腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比
- 【SoftwareTestingHomework2】--3013218086--
- 详解MySQL中EXPLAIN解释命令(转)
- 无法使用prop_Adobe Launch配置流量变量(Prop)
- C++中对私有成员变量进行赋值
- SAP官网学习教程(3) HANA数据库开发
- 07 第三方之文件上传
- 网络编程——TCP编程及UDP编程
- 运筹学那些事,专科学生学习运筹学之运输问题,No.5
- Cisco路由器VLan隔离局域网广播包的配置实验
- 极客日报:虎牙被抬员工当事人再发声;Android 12 DP1 带来新隐私功能;IBM 考虑出售Watson Health业务...
- 用计算机求算术平方根,6.1用计算机计算算术平方根.ppt
- Oracle11g64位安装步骤
- 【毕业设计】深度学习抽烟行为检测算法研究与实现 - python opencv YOLO
- SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式
- css3ps插件,实用的PS插件推荐:长投影设计和CSS3Ps插件
热门文章
- Jeremy Keith在 Fronteers 2010 上的主题演讲
- Visual Studio 2005 Beta2 简体中文版发布
- vim显示行号、语法高亮、自动缩进的设置
- UA SIE545 优化理论基础4 对偶理论简介5 对偶的几何解释
- 模p加法和模p乘法学习
- 图解在emu8086中学习几条汇编语言常用语句
- Sql Server 2008 精简版(Express)和管理工具的安装以及必须重新启动计算机才能安装 SQLServer的问题和第一次使用sqlexpress的连接问题
- css 样式使用方法的累积
- python venv下安装mysql出错 解决方法
- 用DzzOffice管理阿里云OSS