FOR XML PATH 应用及其反向分解
数据库环境:SQL SERVER 2005
我们实现将同一组的数据内容合并到一行的时候,可以通过FOR XML PATH来实现。
有数据如图1,要实现图2的效果

1.图1到图2的FOR XML PATH实现
网上有很多介绍FOR XML的方法,这里不再细说,感兴趣的朋友可以去查询一下它的用法。
--数据准备
;WITH x0
AS ( SELECT 1 AS id ,
'' AS ty
UNION ALL
SELECT 1 AS id ,
'' AS ty
UNION ALL
SELECT 2 AS id ,
'' AS ty
UNION ALL
SELECT 3 AS id ,
'' AS ty
UNION ALL
SELECT 3 AS id ,
'' AS ty
UNION ALL
SELECT 4 AS id ,
'' AS ty
UNION ALL
SELECT 4 AS id ,
'' AS ty
UNION ALL
SELECT 4 AS id ,
'' AS ty
)
/*实现*/
SELECT id ,
STUFF(ty, 1, 1, '') AS ty
FROM ( SELECT id ,
( SELECT ',' + x2.ty
FROM x0 x2
WHERE x2.id = x1.id
FOR
XML PATH('')
) AS ty
FROM x0 x1
GROUP BY id
) t
2.图2到图1的递归实现
从图2到图1,实现的方法不止递归一种方法,各位可以试着用其它方法解决。
/*准备数据*/
WITH x0
AS ( SELECT 1 AS id ,
'001,002' AS ty
UNION ALL
SELECT 2 AS id ,
'' AS ty
UNION ALL
SELECT 3 AS id ,
'004,1234' AS ty
UNION ALL
SELECT 4 AS id ,
'01,005,006' AS ty
),
x1 ( id, ty1, ty2 )
AS ( SELECT id ,
CASE WHEN CHARINDEX(',', ty, 1) > 0
THEN CONVERT(VARCHAR(10), LEFT(ty,
CHARINDEX(',', ty,
1) - 1))
ELSE ty
END AS ty1 ,--本次拆分字符
CASE WHEN CHARINDEX(',', ty, 1) > 0 THEN
STUFF(ty + ',', 1, CHARINDEX(',', ty), '')
ELSE NULL
END AS ty2--待拆分字符串
FROM x0
UNION ALL
SELECT id ,
CONVERT(VARCHAR(10), LEFT(ty2,
NULLIF(CHARINDEX(',', ty2, 1),
0) - 1)) AS ty1 ,--本次拆分字符
STUFF(ty2, 1, CHARINDEX(',', ty2), '') AS ty2--待拆分字符串
FROM x1
WHERE CHARINDEX(',', ty2, 1) > 0
)
SELECT id,ty1 AS ty
FROM x1 ORDER BY id
FOR XML PATH 应用及其反向分解的更多相关文章
- Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现
http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...
- for xml path 将单表中一个字段用逗号分隔
我也是才知道这种用法的,刚好又用到写个简单的例子. select Name from tc_order_detail 如下表,现在要将做到将name每个以逗号连接 declare @df nvarch ...
- SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- Sql Server FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- Sql Server 之 for xml (path,raw,auto,root)
1.for xml path('str') select ID,CreateTime from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...
- 灵活运用 SQL SERVER FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- 转王波洋,SQL语句中的 for XML Path('')
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨
写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合. 在不 ...
- 使用 SQL的 for xml path来进行字符串拼接 (group by)
参考: http://www.cnblogs.com/repository/archive/2011/01/18/1938418.html select convert(varchar(10),c.[ ...
随机推荐
- selenium 处理浏览器多窗口
测试过程中,会弹出一些子窗口,并且有可能在多个窗口之间切换 必须要获取每个窗口的唯一标识符切换到该窗口,才能对该窗口的元素进行操作 首先,获取每个窗口的唯一标识符,然后以及和的形式返回 var mai ...
- BI 多维立方体CUBE
在Bi领域,cube是一个非常重要的概念,是多维立方体的简称,主要是用于支持联机分析应用(OLAP),为企业决策提供支持.Cube就像一个坐标系,每一个Dimension代表一个坐标系,要想得到一个一 ...
- 五指CMS v1.2 GBK 发布下载
五指CMS v1.2 GBK 版本下载地址: http://www.wuzhicms.com/uploadfile/wuzhicms/wuzhicms-v1.2.zip 从内测到公测,五指 ...
- [Locked] Range Sum Query 2D - Mutable
Range Sum Query 2D - Mutable Given a 2D matrix matrix, find the sum of the elements inside the recta ...
- [delphi技术]Delphi常见图象格式转换技术
TJPEGScale = (jsFullSize, jsHalf, jsQuarter, jsEighth);//图片大小(全部,1/2,1/4,1/8)TBitmap.pixelFormat:=pf ...
- Oracle ABP(Autotask Background Process)
ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...
- Xcode5.1离线下载安装及使用iOS5模拟器进行开发调试的方法
Xcode5.1默认不支持iOS5版本的模拟器开发调试,在OS X Mavericks(10.9.x)下默认只能支持iOS6.1及以上版本的模拟器,在OS X Mountain Lion(10.8.x ...
- 以管理员身份启动ClickOnce部署的应用程序
ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这 ...
- hdu 1062 Text Reverse 字符串
Text Reverse Time L ...
- Android ListView分页加载时图片显示问题
场景:Android ListView需要分页加载,每个item中会有图片,图片又是从网络下载的. 问题:在滑动加载下一页时,上一页的图片明明已经下载完成了,但是无法显示出来. Bug重现: 1,加载 ...