日期:2014-05-17  浏览次数:20665 次

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



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

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

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)