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下面的部门是否有人员那位大哥知道的?

解决方案 »

  1.   

    上面的语句只能查询出指定部门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
      

  2.   

    你的B表是 部门表 吧
    [align=center]====  ====
    [/align]
      

  3.   

    就是部门下面还有部门啊,我就是想知道指定部门ID是否有人,如果有人那么这个指定部门ID就要显示出来
    关键就是指定部门ID下面可能还有部门不好判断
    打比方吧
    就是
           计算机部门(部门)--1.计算机应用(部门),
                                     |
                                     |---C某,D某(属于计算机应用部门)                           2.计算机科学与技术(部门)
                                     |
                                     |——ii计算机科学(部门)
                                     |——ii计算机技术(部门)
                                               |
                                               |---E某,F某(属于计算机技术部门)                           3.A某,B某(直属计算机部门)那么如果我指定的部门ID是计算机部门,那么计算机部门可以显示出来;
    如果我指定的部门ID是计算机科学与技术部门,他下面只有2个部门没有人员,那么就不会显示出来,可实际上他的子部门下面是有人的,
    我最开始写的sql只判断当前指定的部门是否有人员存在,没有判断当前部门下面的子部门是否有人
    该怎么解决?
      

  4.   

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

  5.   

    你的意思是不是只要有人的部门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
      

  6.   

    (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   --假如a部门下面没有人只有2个部门的情况
     
    7楼你的这个查询仍然是只查询a.ID=指定部门ID的情况啊,我是想还要包括a.ID下面的子部门是否有人,就是说
    部门下面还包含部门的情况 
      

  7.   

    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
    来找该部门的下级部门
      

  8.   

    参照一下:
    http://topic.csdn.net/u/20080329/11/217b018f-bffc-413f-ba03-df07249a612c.html
      

  9.   

    用 ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)