--查询分组号为6的子孙子节点
with RTD1 as( select id,pid from UserGroup ),RTD2 as( select * from RTD1 where id=6 union all select RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID ) select * from RTD2
--现在想进一步将查询结果转换为逗号分隔的字串
--查询分组号为6的子孙子节点
with RTD1 as( select id,RTD2 as( select * from RTD1 where id=6 union all select RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID ) --select * from RTD2 select ','+cast(id as nvarchar) from RTD2 for xml path('')
查询结果如下:
,6,17,18,20,21,22,23,24,29,25,26,28,27
(13 行受影响)
--现在想进一步去掉左边逗号,同时加上左右圆括号
--查询分组号为6的子孙子节点
with RTD1 as( select id,RTD2 as( select * from RTD1 where id=6 union all select RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID ) select '('+ STUFF( (select ','+cast(id as nvarchar) from RTD2 for xml path('')),1,'' )+ ')'
查询结果如下:
(6,27)
(1 行受影响)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于以上文章中关于for xml path的用法,我贴出一位朋友的博客如下[对这位朋友表示感谢]:
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.
一.FOR XML PATH 简单介绍
那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:
接下来我们来看应用FOR XML PATH的查询结果语句如下:
结果:
< hobbyID > 1 </ hobbyID >
< hName > 爬山 </ hName >
</ row >
< row >
< hobbyID > 2 </ hobbyID >
< hName > 游泳 </ hName >
</ row >
< row >
< hobbyID > 3 </ hobbyID >
< hName > 美食 </ hName >
</ row >