多表一对多关系的字段拼接的经典存储过程
比如说一个学校有多个学院,有学院数据表table1如下:
============================
ID Name
----------------------------
1 中文学院
2 外国语学院
3 计算机学院
4 社会科学学院
============================
然后每个学院都会有多个专业,有专业表table2如下:
==================================
ID XueYuanId ZYName
1 1 汉语专业
2 1 汉语专业二
3 1 汉语专业三
4 3 信息管理专业
5 3 软件专业
6 3 计算机信息专业
====================================
现在我们想实现如下的结果,查询学院,同时增加一个字段并把相应学院的专业拼接在一起。如下:
=============================================
ID Name ZYList
---------------------------------------------
1 中文学院 汉语专业,汉语专业二,汉语专业三
2 外国语学院 null
3 计算机学院 信息管理专业,软件专业,计算机信息专业
4 社会科学学院 null
=============================================
实现的存储过程如下:
select * from
(
select * from table1
)A
OUTER APPLY(
SELECT
[ZYList]= STUFF(REPLACE(REPLACE(
(
SELECT ZYList FROM table2 N
WHERE XueYuanId = A.ID
FOR XML AUTO
), '<N FilesName="', ','), '"/>', ''), 1, 1, '')
)N


浙公网安备 33010602011771号