SQL中 FOR XML PATH 函数用法

SQL中 FOR XML PATH 函数用法

假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

FOR XML PATH 简单介绍

--按XML格式输出查询结果
select * from dbo.Hobby for xml path
--自定义XML行节点名称 select * from dbo.Hobby for xml path('MyHobby')
--自定义XML列节点名称 select hobbyId as 'MyCode', hName as 'MyName' from dbo.Hobby for xml path('MyHobby')
--对字符串类型字段自定义输出格式 SELECT '[ '+hName+' ]' FROM dbo.Hobby FOR XML PATH('')
--对其他类型的列自定义输出格式:将它们转换成字符串格式 select '{'+STR(hobbyId)+'}','[ '+hName+' ]' FROM dbo.Hobby FOR XML PATH('')

查询结果:

 1 <!--按XML格式输出查询结果-->
 2 <row>
 3   <hobbyId>1</hobbyId>
 4   <hName>爬山</hName>
 5 </row>
 6 <row>
 7   <hobbyId>2</hobbyId>
 8   <hName>游泳</hName>
 9 </row>
10 <row>
11   <hobbyId>3</hobbyId>
12   <hName>美食</hName>
13 </row>
14 
15 <!--自定义XML行节点名称-->
16 <MyHobby>
17   <hobbyId>1</hobbyId>
18   <hName>爬山</hName>
19 </MyHobby>
20 <MyHobby>
21   <hobbyId>2</hobbyId>
22   <hName>游泳</hName>
23 </MyHobby>
24 <MyHobby>
25   <hobbyId>3</hobbyId>
26   <hName>美食</hName>
27 </MyHobby>
28 
29 <!--自定义XML列节点名称-->
30 <MyHobby>
31   <MyCode>1</MyCode>
32   <MyName>爬山</MyName>
33 </MyHobby>
34 <MyHobby>
35   <MyCode>2</MyCode>
36   <MyName>游泳</MyName>
37 </MyHobby>
38 <MyHobby>
39   <MyCode>3</MyCode>
40   <MyName>美食</MyName>
41 </MyHobby>
42 
43 <!--对字符串类型字段自定义输出格式-->
44 [ 爬山 ][ 游泳 ][ 美食 ]
45 
46 <!--对其他类型的列自定义输出格式-->
47 {         1}[ 爬山 ]{         2}[ 游泳 ]{         3}[ 美食 ]
View Code

FOR XML PATH 简单应用

增加一张学生表,列分别为(stuId,sName,hName),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好,表结构如下:

以“爱好1,爱好2,爱好3...”的格式显示数据

--显示所有学生的爱好的结果集
select A.sName,
    (select hName+'' from dbo.StudentHobby
        where sName=A.sName for xml path('')) as hobbyList 
from dbo.StudentHobby A
group by A.sName

--去除逗号显示
select b.sName, left(B.hobbyList, len(B.hobbyList)-1) as StuHobby from (
    select A.sName,
    (select hName+'' from dbo.StudentHobby
        where sName=A.sName for xml path('')) as hobbyList 
    from dbo.StudentHobby A
    group by A.sName
)B

查询结果:

 

 

 

posted @ 2020-10-10 16:12  智者见智  阅读(1839)  评论(0编辑  收藏  举报