您当前的位置: 首页 >  sql

暂无认证

  • 0浏览

    0关注

    99104博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[MSSQL]灵活运用FOR XML PATH

发布时间:2014-09-26 19:38:40 ,浏览量:0

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

        一.FOR XML PATH 简单介绍

             那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

       接下来我们来看应用FOR XML PATH的查询结果语句如下:

SELECT   *   FROM   @hobby   FOR  XML PATH

       结果:

< row >    < hobbyID > 1 ' + STR (hobbyID) + ' } ' , ' [  ' + hName + '  ] '   FROM   @hobby   FOR  XML PATH( '' )

    好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

    接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。

        二.一个应用场景与FOR XML PATH应用

        首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

           

        这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

SELECT  B.sName, LEFT (StuList, LEN (StuList) - 1 )  as  hobby  FROM  ( SELECT  sName, ( SELECT  hobby + ' , '   FROM  student     WHERE  sName = A.sName     FOR  XML PATH( '' ))  AS  StuList FROM  student A  GROUP   BY  sName ) B 

         结果如下:

 分析: 好的,那么我们来分析一下,首先看这句:

SELECT  hobby + ' , '   FROM  student     WHERE  sName = A.sName     FOR  XML PATH( '' )

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那么接着看:

SELECT  B.sName, LEFT (StuList, LEN (StuList) - 1 )  as  hobby  FROM  ( SELECT  sName, ( SELECT  hobby + ' , '   FROM  student     WHERE  sName = A.sName     FOR  XML PATH( '' ))  AS  StuList FROM  student A  GROUP   BY  sName ) B  

剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby  就是来去掉逗号,并赋予有意义的列明!

好啦,太晚啦就说到这里吧!

去掉逗号可以用stuff(StuList,LEN(StuList),1,'')

SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM ( SELECT sName, (SELECT hobby+',' FROM student    WHERE sName=A.sName    FOR XML PATH('')) AS StuList FROM student A  GROUP BY sName ) B  

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.8043s