读书人

这么一个存储过程可能要在数据库递归

发布时间: 2013-01-28 11:49:56 作者: rapoo

这样一个存储过程,可能要在数据库递归
这么一个存储过程,可能要在数据库递归


这样一个树形结构,统计会议总数,包含国家级会议,省级会议,市级会议,区级会议,...下面等等。我点选全国,要将二级区域省的会议统计出来,形成列表展示(省要包含自身省级会议以及各自市,区,乡镇会议等等);我点选某个省,比如江苏省,要把各个市的会议总数总计出来(市要包含它自身市级会议,它下面各级会议)依此类推。

这个例子举的比较牵强,但是需求的意思是这样的,我写了快四天了,没写出合适的,看看论坛里有没有大侠相助。

sqlserver2008数据库,有区域表areas(areaID,parentID,areaName);会议表meeting(meetingID,meetingAreaID,meetingName),meetingAreaID和areaID是可以关联的,都是地址的ID 数据库 sqlserver 存储过程 数据库递归
[解决办法]


with a(meetingID, meetingAreaID, meetingName) as (
select 1, 1, '人代会' union all
select 2, 2, '江苏政协一次会议' union all
select 3, 4, '南京人大' union all
select 4, 1, '全国劳模表彰' union all
select 5, 3, '浙江工商业大会'
)
,b(areaID , areaName, parentID) as(
select 1, '全国', null union all
select 2, '江苏', 1 union all
select 3, '浙江', 1 union all
select 4, '南京', 2
),c as(
select meetingareaid as a,count(meetingareaid) b from a
group by meetingareaid
)
,d as(
select areaname a,parentid d,isnull(areaID,0) c,c.b from b left join c on b.areaID=c.a
)
,e as(
select a , c, d=c, b from d
union all
select e.a , d.c, e.d, d.b from e,d where d.d=e.c
)
select a,sum(b) from e
group by a
option ( maxrecursion 0)

读书人网 >SQL Server

热点推荐