数据库环境: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 应用及其反向分解的更多相关文章

  1. Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现

    http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...

  2. for xml path 将单表中一个字段用逗号分隔

    我也是才知道这种用法的,刚好又用到写个简单的例子. select Name from tc_order_detail 如下表,现在要将做到将name每个以逗号连接 declare @df nvarch ...

  3. SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  4. Sql Server FOR XML PATH

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

  5. Sql Server 之 for xml (path,raw,auto,root)

    1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...

  6. 灵活运用 SQL SERVER FOR XML PATH

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

  7. 转王波洋,SQL语句中的 for XML Path('')

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

  8. sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨

    写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合.  在不 ...

  9. 使用 SQL的 for xml path来进行字符串拼接 (group by)

    参考: http://www.cnblogs.com/repository/archive/2011/01/18/1938418.html select convert(varchar(10),c.[ ...

随机推荐

  1. JZ2440开发笔记(6)——存储控制器

    存储控制器与CPU及其它外设的关系 我们看到cpu上集成了一个存储管理器,外围的存储设备都接在这个存储管理器上.cpu负责发出命令,其它的一切工作都交给了存储管理器.那么存储管理器是如何来管理这些外设 ...

  2. 单调栈 二 nyOj 最大矩形和

    主要思想来自 http://blog.csdn.net/wuyanyi/article/details/7243580 题目的连接,头次提交的同学需要注册 http://acm.nyist.net/J ...

  3. sed命令教程

    转载自:http://coolshell.cn/articles/9104.htmlawk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以 林 ...

  4. HW5.1

    public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...

  5. Windows下使用GCC编译器

    1.GCC编译器的选择 Windows下最常见的安装GCC的方式有两种:Cygwin和MinGW.本文主要介绍MinGW的安装配置. 2.下载MinGW 下载地址:http://sourceforge ...

  6. HDU-3622 Bomb Game 2sat

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3622 题意:一个平面上有很多的炸弹,每个炸弹的爆炸范围是一样的,求最大的爆炸范围使得炸弹之间不相互影响 ...

  7. Only one database connection at a time is supported

      Only one database connection at a time is supported 在网上找到了2个方法: 1. VSS在使用过程中,尤其是数据迁移的过程中,可能会出现上述情况 ...

  8. iframe与include的区别

    iframe与include区别和使用问题 1.iframe可以用在静态和动态页面,include只能用在动态页面. 2.iframe是视图级组合,include是代码级组合. 3.iframe独立成 ...

  9. 关于学习汇编的一些规则的理解(div mul cf of)

    ->1.div(除法)  被除数/除数 ->一共有三种格式的除法,分别是8位,16位,32位,这里的位数表示的是除数的位数 ->实现div其实也很简单就是除数为被除数的一半就ok - ...

  10. 在.net Core 中像以前那样的使用HttpContext.Current

    今晚在学习.net Core 的使用 拿来以前项目进行改造最简单的问题就是怎么做到让httpcontext 和以前兼容 ,折腾的很久 终于搞定,纪录一下 .net core中使用了无处不在的注入,看了 ...