请教一个SQL实现

因小弟第一次发帖,问题可能描述的不是很清楚,请大家谅解,现请教大家一个SQL实现(ORACLE),情况如下:

现有两张表,其中一张表A,存放的是单位信息,树形结构。另一张表存放的是人员的登录信息,其中有一列存放的是该人员对应的单位编码。现需要实现如下需求:对单位(第一级)进行分类统计人员登录个数,单位的人员登录个数为该单位以及该单位的子单位登录个数之和。请大家赐教,不甚感激!

6个回答

select p.name , (select count(*) from emp e where e.pid = p.id) from part p

是不是这么个意思?
单位
公安机关 3
办事处 1
办公厅 2
政府机关 5
财政部门 1
人事部门 2
规划部门 2
.....
?你是要实现这样的页面显示效果么?
如果不先确定这个是你的想法,没法写下去。
不过,在登录信息表中,这个的查询很简单。
因为有字段是人员的单位编号,那么每一个单位编号指定是唯一的。
那么我们可以以单位编号为分组条件,这样就查询出每一个单位的登录人数了。
在由表关联字段和单位表去关联查询。
但我要说的一点,因为你给的表是树形结构的,如果以oracle的存储过程的游标来完成可能会办得到,如果要以一条查询语句来实现的话,那么就要结合java的递归方式来实现了。

哦 那是我理解多了 你要是就像那么实现的话 可以的 一条sql也能办到

select p.name , z.cc from emp e ,part p where p.id = e.pid group by p.name

我都用中文表示吧。comp 单位表 emp登录信息表
select 单位编号 as compCode,count(*) as empNum from emp group by 单位编号
这个查出每个单位的登录个数
在有就是,你的单位表是树形表,那么可能设计的时候表中会有一个parentId来表示子单位属于哪一个上一级单位底下的。一般父级都设置为0
比如:
compCode compName parentId
1 公安机关 0
2 政府机关 0
3 办事处 1
4 办公厅 1
5 财政部门 2
6 人事部门 2
7 规划部门 2
那么上面的就是树形的表机构,很明了的能看出关系。
select p.compName,e.empNum
from comp p,
(select 单位编号 as empCode,count(*) as empNum from emp group by 单位编号) e
where e.compCode= p.compCode
and parentId = 0;
在提醒一下,因为你用的是oracle,oracle在group by上很特殊,这个你可以体会得到。

去 百度或google,搜一下
oracle connect by
就能找到你想要的了.

立即提问