SQL – for xml path('') 实现多行合并到一行, 并带有分隔符

docs.microsoft.com 链接:  [SQL 

FO奥迪Q5 XML PATH
有的人大概知道某一个人或然不晓得,其实它就是将查询结果集以XML情势表现,有了它大家能够简化大家的查询语句达成部分以前恐怕要求依附函数活存款和储蓄进程来成功的劳作。那么以三个实例为主.

](
XML PATH应用**

风流洒脱.FO汉兰达 XML PATH 简要介绍

 

那便是说依旧首先来介绍一下FOWrangler XML PATH
,若是未来有一张兴趣爱好表(hobby卡塔尔用来贮存兴趣爱好,表结构如下:图片 1

首先呢!我们在追加一张学子表,列分别为(stuID,sName,hobby卡塔 尔(阿拉伯语:قطر‎,stuID代表学子编号,sName代表学子姓名,hobby列存学子的赏识!那么今后表结构如下:

接下去我们来看使用FO福特Explorer 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中华V 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(”)

好的 FOHighlander XML PATH就宗旨介绍到这里呢,越多关于FO中华VXML的学问请查阅支持文书档案!

接下去大家来看三个FOLacrosse XML PATH的运用处景呢!那么起首吧。。。。。。

二.一个行使场景与FO宝马X3 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(”)

那句是通过FO奔驰M级 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

余下的代码首先是将表分组,在实行FOCR-V XML PATH
格式化,当时当还从未施行最外层的SELECT时查询出的结构为:

图片 16

可以看来StuList列里面包车型大巴多少都会多出一个逗号,此时随外层的语句:SELECT
B.sName,LEFT(StuList,LEN(StuList)-1) as hobby
正是来去掉逗号,并赋予有意义的列明!

发表评论

电子邮件地址不会被公开。 必填项已用*标注