知识在于积累(.NET之路……)

导航

多表一对多关系的字段拼接的经典存储过程

比如说一个学校有多个学院,有学院数据表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

 

posted on 2010-08-05 11:19  汤尼  阅读(328)  评论(0)    收藏  举报