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

有部门表,人员表,在部门下有人跟部门同时属于同一部门的关系,问能否查找到部门下有人的部门(过滤掉没人的部门)?
A:部门表 name,id
B:人员表 name,id,part_id
select * from a where a.id in(select part_id from B where part_id='[指定部门id]')
上面的语句只能查询出指定部门ID下面是否有人员,不能查询指定部门ID下面的部门是否有人员

那位大哥知道的?


------解决方案--------------------
上面的语句只能查询出指定部门ID下面是否有人员,不能查询指定部门ID下面的部门是否有人员 
这句什么意思啊,是部门下面还有部门,要统计子部门的人数?那你A表应该是个树的结构啊

下面的语句是查指定部门下面有几个人
select a.name,a.id,count(b.id) num
from a,b
where a.id=b.part_id(+)
and a.id=指定部门ID 
group by a.name,a.id
------解决方案--------------------


SQL code
select *
from a
where a.id in (select part_id from B where part_id='[指定部门id]') 
or a.id ='[指定部门id]';

------解决方案--------------------
你的意思是不是只要有人的部门

SELECT c.ID,c.NAME
FROM (SELECT a.ID,a.NAME,COUNT(b.ID) num 
FROM a,b 
WHERE a.ID=b.part_id(+) 
AND a.ID=指定部门ID
GROUP BY a.NAME,a.ID ) c
WHERE c.num > 0
------解决方案--------------------
A:部门表 name,id 
没有指定部门之间的层级,这你样的定义,没办法知道哪些是其下属部门。

最起码要定义
A:部门表 name,id ,upid
指明层级关系,再用Connect By找出下级部门
select
*
from a
connect by prior id=upid
--start with upid is null--顶级为空
start with upid=xxx
来找该部门的下级部门




------解决方案--------------------
参照一下:
http://topic.csdn.net/u/20080329/11/217b018f-bffc-413f-ba03-df07249a612c.html
------解决方案--------------------
用 ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)