SQL - for xml path('') 实现多行合并到一行, 并

2019-08-02 03:45栏目:网站首页

docs.microsoft.com 链接:  [SQL 

FO奥德赛 XML PATH 有的人或然精通某一个人想必不知晓,其实它正是将查询结果集以XML格局展现,有了它我们得以简化大家的查询语句完结部分从前也许须要借助函数活存款和储蓄进程来完结的做事。那么以贰个实例为主.

]( XML PATH应用**

一.FOENVISION XML PATH 简要介绍

 

那正是说还是首先来介绍一下FO奥迪Q7 XML PATH ,假前段时间后有一张兴趣爱好表(hobby)用来存放在兴趣爱好,表结构如下:图片 1

先是呢!大家在追加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么未来表结构如下:

接下去我们来看使用FOXC90 XML PATH的查询结果语句如下:

 

SELECT*FROM@hobbyFOR XML PATH

           图片 2

结果:

 

图片 3

        那时,我们的供给是询问学生表,突显全部学员的喜欢的结果集,代码如下:

<row>
<hobbyID>1</hobbyID>
<hName>爬山</hName>
</row>
<row>
<hobbyID>2</hobbyID>
<hName>游泳</hName>
</row>
<row>
<hobbyID>3</hobbyID>
<hName>美食</hName>
</row>

 

图片 4

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 

综上可得FO福睿斯 XML PATH 能够将查询结果依附行输出成XML每一类!

         结果如下:图片 5

那便是说,如何改换XML行节点的名称呢?代码如下:

 

SELECT*FROM@hobbyFOR XML PATH('MyHobby')

SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby  正是来去掉逗号

 

 

结果必然也综上说述了吗?没有错原本的行节点<row> 形成了大家在PATH前面括号()中,自定义的称呼<MyHobby>,结果如下:

图片 6

<MyHobby>
<hobbyID>1</hobbyID>
<hName>爬山</hName>
</MyHobby>
<MyHobby>
<hobbyID>2</hobbyID>
<hName>游泳</hName>
</MyHobby>
<MyHobby>
<hobbyID>3</hobbyID>
<hName>美食</hName>
</MyHobby>

图片 7

以此时候留神的敌人确定又会问那么列节点怎样转移啊?还记的给列起小名的十分重要字AS吗?对了正是用它!代码如下:

SELECT hobbyID as'MyCode',hName as'MyName'FROM@hobbyFOR XML PATH('MyHobby')

 

那正是说那年大家列的节点名称也会编制程序我们自定义的称谓 <MyCode>与<MyName>结果如下:

图片 8

<MyHobby>
<MyCode>1</MyCode>
<MyName>爬山</MyName>
</MyHobby>
<MyHobby>
<MyCode>2</MyCode>
<MyName>游泳</MyName>
</MyHobby>
<MyHobby>
<MyCode>3</MyCode>
<MyName>美食</MyName>
</MyHobby>

图片 9

啊! 既然行的节点与列的节点我们都得以自定义,大家是还是不是能够创设大家欣赏的出口格局呢?照旧看代码:

SELECT'[ ' hName ' ]'FROM@hobbyFOR XML PATH('')

没有错大家还足以经过标识 号,来对字符串类型字段的输出格式举办定义。结果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

那便是说另外门类的列怎么自定义? 不要紧,大家将它们转变到字符串类型就行呐!举个例子:

SELECT'{' STR(hobbyID) '}','[ ' hName ' ]'FROM@hobbyFOR XML PATH('')

好的 FOTucson XML PATH就大旨介绍到此地呢,愈来愈多关于FORXML的文化请查阅扶助文书档案!

接下去大家来看一个FOWrangler XML PATH的采用场景吧!那么初步吧。。。。。。

二.一个运用场景与FOCRUISER XML PATH应用

第一呢!大家在加码一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的欢快!那么以往表结构如下:

图片 10

那时,大家的渴求是询问学生表,突显全数学生的爱怜的结果集,代码如下:

图片 11

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
GROUPBY sName
) B

图片 12

结果如下:图片 13

分析: 好的,那么大家来深入分析一下,首先看那句:

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

那句是由此FOKoleos XML PATH 将某一姓名如张三的爱护,展现成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那正是说随着看:

图片 14

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
GROUPBY sName
) B

图片 15

余下的代码首先是将表分组,在实践FORAV4 XML PATH 格式化,那时当还一贯不推行最外层的SELECT时查询出的结构为:

图片 16

能够看出StuList列里面包车型地铁数额都会多出一个逗号,那时随外层的话语:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby 正是来去掉逗号,并予以有含义的列明!

版权声明:本文由威尼斯人app发布于网站首页,转载请注明出处:SQL - for xml path(&#39;&#39;) 实现多行合并到一行, 并