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('') 实现多行合并到一行, 并带有分隔符相关推荐

  1. SQL中的for xml path

    点击关注"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server 20 ...

  2. sql查询语句for xml path语法

    [原地址] for xml path作用:将多行的查询结果,根据某一些条件合并到一行. 例:现有一张表 执行下面语句 select Department,(SELECT Employee+',' FR ...

  3. (4.28)for xml path 在合并拆分上的作用演示

    for xml path 用于合并与拆分 1.合并 很多时候需要在SQL Server中创建逗号分隔列表.这可以使用SQL Server的DOR XML PATH功能完成.与select语句一起使用时 ...

  4. sqlserver的for xml path和mysql的group_concat的区别

    前几天遇到公司更换数据库,将sqlserver更改为mysql,更改完后发现后台sql报错,是一个关于多行转换成一行的SQL问题,度娘告知for xml path只适用于sqlserver,并不适用于 ...

  5. ORACLE纯SQL实现多行合并一行

    ORACLE纯SQL实现多行合并一行 项目中遇到一个需求,需要将多行合并为一行. 表结构如下: NAME                            Null           Type ...

  6. sql server 利用 For Xml Path('') 多行数据拼接成一个字符串

    注意:这里有一种可能被弃用的方法,微软真他么坑死了,我的版本是19的,以前可以用,现在不行了 方法一(弃用): SELECT(SELECT CAST(bs_id AS VARCHAR(50)) + ' ...

  7. 使用 FOR XML PATH 合并SQL Server查询结果的重复行

    参考资料: http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html http://www.cnblogs.com/code ...

  8. SQL Server FOR XML PATH 语句的应用

    在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. DECLARE @TempTable table(UserID int , Use ...

  9. SQL Server FOR XML PATH 语句的应用---列转行

    经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法. 在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应 ...

最新文章

  1. 剥开比原看代码17:比原是如何显示交易的详细信息的?
  2. ngx_lua_API 指令详解(三)怎样理解 cosocket指令
  3. 【转载】如何做一份突出的PPT
  4. rabbitmq怎样确认是否已经消费了消息_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递...
  5. 腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比
  6. 【SoftwareTestingHomework2】--3013218086--
  7. 详解MySQL中EXPLAIN解释命令(转)
  8. 无法使用prop_Adobe Launch配置流量变量(Prop)
  9. C++中对私有成员变量进行赋值
  10. SAP官网学习教程(3) HANA数据库开发
  11. 07 第三方之文件上传
  12. 网络编程——TCP编程及UDP编程
  13. 运筹学那些事,专科学生学习运筹学之运输问题,No.5
  14. Cisco路由器VLan隔离局域网广播包的配置实验
  15. 极客日报:虎牙被抬员工当事人再发声;Android 12 DP1 带来新隐私功能;IBM 考虑出售Watson Health业务...
  16. 用计算机求算术平方根,6.1用计算机计算算术平方根.ppt
  17. Oracle11g64位安装步骤
  18. 【毕业设计】深度学习抽烟行为检测算法研究与实现 - python opencv YOLO
  19. SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式
  20. css3ps插件,实用的PS插件推荐:长投影设计和CSS3Ps插件

热门文章

  1. Jeremy Keith在 Fronteers 2010 上的主题演讲
  2. Visual Studio 2005 Beta2 简体中文版发布
  3. vim显示行号、语法高亮、自动缩进的设置
  4. UA SIE545 优化理论基础4 对偶理论简介5 对偶的几何解释
  5. 模p加法和模p乘法学习
  6. 图解在emu8086中学习几条汇编语言常用语句
  7. Sql Server 2008 精简版(Express)和管理工具的安装以及必须重新启动计算机才能安装 SQLServer的问题和第一次使用sqlexpress的连接问题
  8. css 样式使用方法的累积
  9. python venv下安装mysql出错 解决方法
  10. 用DzzOffice管理阿里云OSS