首页 新闻 会员 周边 捐助

oracle求一个地区下的总人数?

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-25 20:48

有两张表 地区表 depart,地区人员信息表 peopleInfo

地区表 depart表结构如下
地区编号  上级      地区名称
departId  parentId  departName
0                           中国
01            0           北京
02            0            山东
010          01          海淀
011          01          昌平
020          02          青岛
021          02          济南

地区人员信息表 peopleInfo 表结构如下
人员编号 姓名       所属地区 人员流动   性别(0为女,1为男)
peopleId peopleName DeptId   peopleFlow peopleSex
1        lily                  010      112               0
2        lucy                010      23                 0
3        lilei                 011      342                1
4        hanmeimei      020      34                  0

1、选择一个地区的Id,查询这个地区所有本下级地区包含人数总和?
输出格式:地区名称,人数

2、假设下边数据为事例数据,性别0为女,1为男。查询输出下边格式:
北京                    山东                性别
所有人数之和         所有人数之和     男
所有人数之和         所有人数之和     女

坠叶飘香的主页 坠叶飘香 | 初学一级 | 园豆:153
提问于:2013-08-22 19:40
< >
分享
最佳答案
0

根据地区的ID查询该地区下面所有的地区ID(拿山东ID=02为例):

select departid
  from depart d
 start with d.departid = '02'
connect by prior d.departid = d.parentid

 1. 

select departName, count(d.DeptId) Qty
  from (select departid, departName
          from depart d
         start with d.departid = '02'
        connect by prior d.departid = d.parentid) a,
       peopleInfo p
 where a.departid = p.DeptId
 group by a.departName

2.

--获取当前地区的顶级地区Id
function
GetTopDepartId(departid varchar2) return varchar2 as pDepartId varchar2; begin select c.departid into pDepartId from depart c where c.parent_id = '0' start with d.parentid = '0' connect by prior d.departid = d.parentid; return pDepartId; end; --获取顶级地区个性别的数 select d.departName, DECODE(peopleSex, 0, '', '') as Sex, sum(qty) as Qty from (select GetTopDepartId(departId) as Id, p.Qty from depart d, (select deptid, peopleSex, count(0) as qty from peopleInfo group by deptid, peopleSex) p where d.departId = p.deptid start with d.parentid = '0' connect by prior d.departid = d.parentid) a, depart d where d.departid = a.id group by d.departName, peopleSex

完成上面以后再做行转列就查处对应的结果
收获园豆:10
webaspx | 小虾三级 |园豆:1973 | 2013-08-22 22:33

谢谢啦!

坠叶飘香 | 园豆:153 (初学一级) | 2013-08-25 20:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册