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 
 2 <row>
 3   <hobbyId>1hobbyId>
 4   <hName>爬山hName>
 5 row>
 6 <row>
 7   <hobbyId>2hobbyId>
 8   <hName>游泳hName>
 9 row>
10 <row>
11   <hobbyId>3hobbyId>
12   <hName>美食hName>
13 row>
14 
15 
16 <MyHobby>
17   <hobbyId>1hobbyId>
18   <hName>爬山hName>
19 MyHobby>
20 <MyHobby>
21   <hobbyId>2hobbyId>
22   <hName>游泳hName>
23 MyHobby>
24 <MyHobby>
25   <hobbyId>3hobbyId>
26   <hName>美食hName>
27 MyHobby>
28 
29 
30 <MyHobby>
31   <MyCode>1MyCode>
32   <MyName>爬山MyName>
33 MyHobby>
34 <MyHobby>
35   <MyCode>2MyCode>
36   <MyName>游泳MyName>
37 MyHobby>
38 <MyHobby>
39   <MyCode>3MyCode>
40   <MyName>美食MyName>
41 MyHobby>
42 
43 
44 [ 爬山 ][ 游泳 ][ 美食 ]
45 
46 
47 {         1}[ 爬山 ]{         2}[ 游泳 ]{         3}[ 美食 ]

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

查询结果: