数据库环境: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. c++11 lambda递归调用写法

    偶然想到要在函数内部使用lambda递归调用,以下是可行的写法,可参考 std::function<void(Node * container,const BlendFunc &blen ...

  2. c++/c字符串操作汇集

    1. 字符串替换 void string_replace(std::string &strBig, const std::string &strsrc, const std::stri ...

  3. codeforces 664A Complicated GCD

    水题..[a,b]区间数的最大公约数. a==b输出a 否则输出1 #include<cstdio> #include<cstring> #include<iostrea ...

  4. 【Java基础】增强for循环要注意陷阱

    什么是增强for循环 增强for循环是一种简单模式的for循环,为了方便数组和集合的遍历而存在. int[] arr = new int[]{1, 2, 3, 4, 5, 6}; for (int a ...

  5. Linux的read命令

    对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e &quo ...

  6. HTTP/2 常见问题回答

    常见问题 为什么修订HTTP? HTTP/1.1已经很好的服务Web超过15个年头,但它的劣势开始显现. 载入一个Web页面比之前占用更多的资源(详情可见HTTP压缩页大小统计),有效的载入这些资源很 ...

  7. python学习(4)

    python(4)4.1 高阶函数:map/reduce map:实际上map也是一个函数,只不过他可以在参数里面包含别的函数.他有两种参数:第一种:函数(作用在后面要说的序列上),第二种:一个序列  ...

  8. An existing PostgreSql installation has been found... 的解决

    PostgreSql卸载之后,重新安装时跳出如下信息: Anexisting PostgreSql installation has been found atC:\ProgramFiles\Post ...

  9. [C#]工具类—FTP上传下载

    public class FtpHelper { /// <summary> /// ftp方式上传 /// </summary> public static int Uplo ...

  10. WINFORM 自定义开关按钮控件-

    本文章转载:http://www.cnblogs.com/feiyangqingyun/archive/2013/06/15/3137597.html OK,大工告成,上图演示效果. 源码下载:htt ...