数据库环境:SQL SERVER 2005

  我们实现将同一组的数据内容合并到一行的时候,可以通过FOR XML PATH来实现。

有数据如图1,要实现图2的效果

            

1.图1到图2的FOR XML PATH实现

  网上有很多介绍FOR XML的方法,这里不再细说,感兴趣的朋友可以去查询一下它的用法。

--数据准备
;WITH    x0AS ( SELECT   1 AS id ,'001' AS tyUNION ALLSELECT   1 AS id ,'002' AS tyUNION ALLSELECT   2 AS id ,'003' AS tyUNION ALLSELECT   3 AS id ,'004' AS tyUNION ALLSELECT   3 AS id ,'1234' AS tyUNION ALLSELECT   4 AS id ,'01' AS tyUNION ALLSELECT   4 AS id ,'005' AS tyUNION ALLSELECT   4 AS id ,'006' AS ty) /*实现*/SELECT  id ,STUFF(ty, 1, 1, '') AS tyFROM    ( SELECT    id ,( SELECT    ',' + x2.tyFROM      x0 x2WHERE     x2.id = x1.idFORXML PATH('')) AS tyFROM      x0 x1GROUP BY  id) t

View Code

2.图2到图1的递归实现

  从图2到图1,实现的方法不止递归一种方法,各位可以试着用其它方法解决。

/*准备数据*/
WITH    x0AS ( SELECT   1 AS id ,'001,002' AS tyUNION ALLSELECT   2 AS id ,'003' AS tyUNION ALLSELECT   3 AS id ,'004,1234' AS tyUNION ALLSELECT   4 AS id ,'01,005,006' AS ty),x1 ( id, ty1, ty2 )AS ( SELECT   id ,CASE WHEN CHARINDEX(',', ty, 1) > 0THEN CONVERT(VARCHAR(10), LEFT(ty,CHARINDEX(',', ty,1) - 1))ELSE tyEND AS ty1 ,--本次拆分字符CASE WHEN CHARINDEX(',', ty, 1) > 0 THEN STUFF(ty + ',', 1, CHARINDEX(',', ty), '')ELSE NULLEND AS ty2--待拆分字符串FROM     x0UNION ALLSELECT   id ,CONVERT(VARCHAR(10), LEFT(ty2,NULLIF(CHARINDEX(',', ty2, 1),0) - 1)) AS ty1 ,--本次拆分字符STUFF(ty2, 1, CHARINDEX(',', ty2), '') AS ty2--待拆分字符串FROM     x1WHERE    CHARINDEX(',', ty2, 1) > 0)SELECT  id,ty1 AS tyFROM    x1 ORDER BY id

View Code

转载于:https://www.cnblogs.com/boss-he/p/4748192.html

FOR XML PATH 应用及其反向分解相关推荐

  1. 灵活运用 SQL SERVER FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  2. 将SQL for xml path('')中转义的字符正常显示

    将SQL for xml path('')中转义的字符正常显示 在工作中出现的发送邮件的时候:因为邮件内容中有链接,并且多个拼接在一起的,于是用了for xml path().        但是,这 ...

  3. SQL之 Stuff和For xml path

    示例 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA ...

  4. 使用自连接、for xml path('')和stuff合并显示多行数据到一行中(转)

    原文: http://njm.iteye.com/blog/795881 --使用 自连接.for xml path('')和stuff合并显示多行数据到一行中--注 --1.计算列可以不用包含在聚合 ...

  5. 行转列(FOR XML PATH)

    SELECT (SELECT ac.ColName+',' FROM T1 AS ac FOR XML PATH('')) AS ColName,(SELECT ac.colTitle+',' FRO ...

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

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

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

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

  8. 利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符

    T-sql 有一个for xml path('')的从句能把多行结果合并到一行,并成为xml 格式 比如有一张表tb有两列,其格式和数据为: id value ----- 1 aa 1 bb 2 aa ...

  9. (Sql Server)SQL FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  10. 灵活运用 SQL Server 数据库的 FOR XML PATH

    起因¶ 今天欧阳冰提出一个报表需求,其核心部分可以简化为这样一张表格: 调度单号 与调度单相关的多张作业单号 001 0001/0002/0003 002 0004 003 0005/0006/000 ...

最新文章

  1. CSS设计指南(读书笔记 - 选择器)
  2. android考勤系统,Android端实现考勤管理系统
  3. Quartus 使用tcl分配管脚
  4. linux系统管理Linux系统实验,实验三 linux系统管理
  5. 出栈是如何操作的?指令:POP dest dest为16位操作数
  6. 【英语学习】【English L06】U06 Banking L4 I'd like to transfer some money
  7. .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除
  8. 前端虚拟列表的实现原理
  9. 使用DIME协议上传文件
  10. mysql中根据经纬度求距离_mysql、java中根据经纬度计算距离
  11. 单片机/嵌入式体系介绍
  12. 泰坦尼克号预测python_泰坦尼克号生存预测(python)
  13. 一本笔记,看懂《未来简史》!
  14. 基于MediaPipe API实现骨骼识别
  15. 微信小程序学习记录——4.框架-视图层
  16. IP地址冲突怎么办? 如何解决局域网IP地址冲突?
  17. 布局管理器——表格布局
  18. imx6芯片通过EIM总线外扩多路sja1000 CAN控制器
  19. java floor cell_英语翻译The cell floor and its composite liner system was sloped
  20. 淘宝网全国实时交易地图[转]

热门文章

  1. 浙大计算机学院 数字媒体处理与企业智能计算实验室在哪个校区,浙大计算机学院各大实验室介绍.pdf...
  2. mysql 数据库安装命令_Mysql数据库的安装
  3. mysql银行储蓄额度格式_mysql创建表用于银行储蓄系统
  4. java符号用语_java常用语
  5. 容器技术Docker K8s 38 Serverless Kubernetes(ASK)详解-阿里云Serverless容器(ASK)产品介绍
  6. 算法:合并两个有序链表21. Merge Two Sorted Lists
  7. html与css怎么混合运用,Web设计中的CSS混合模式
  8. 编译原理完整学习笔记(六):语义分析和中间代码生成
  9. 计算机图形学完整笔记(七):曲线曲面 - 1
  10. 【树上贪心】Tree with Small Distances【codeforces-Round #506-div3-E】