有两张表 地区表 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为男。查询输出下边格式:
北京 山东 性别
所有人数之和 所有人数之和 男
所有人数之和 所有人数之和 女
根据地区的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
完成上面以后再做行转列就查处对应的结果
谢谢啦!