首先是一个企业表 取名 org吧 然后组织有个字段 联系人 Linkman, 组织名orgname , 组织号,orgid ,上级组织号 parentorgid  企业里面至少有三层结构,就是有 总企业,分企业,部门 吧 
再有一员工表  取名 emp吧 然后 有字段 empid , orgid 
还有一设备表 取名 equ吧 然后 有字段 equid ,orgid
他们之间的关系 不说也是orgid了 但都是直属于某一层组织 不能属于上一层组织现在求一SQL是 select  组织名 联系人 员工人数 设备数   要求,根据条件选择的组织列出该组织及其下属组织的组织信息
比如 如果选择某一分企业,就把该分企业和他的下属部门列出来,并且求该分企业的总人数和总设备数和下属各部门的人数和设备数 ,如果选择 总企业就把该总企业和下属分企业列出来 ,并列出详细信息希望我讲的清楚了,求各位高手帮忙

解决方案 »

  1.   

    如果选择总企业,不需要列下属分企业的下属部门吧?--建立临时表,存储各组织直属的员工数和设备数(不建立临时表也可以,只要不嫌写一个大SQL太长)
    create table temp1 t as
    select o.Linkman,
           o.orgid,
           o.orgname,
           o.parentorgid,
           nvl(t1.emp_count),
           nvl(t2.equ_count)
      from org o,
           (select o1.orgid, count(*) as emp_count
              from org o1, emp e1
             where o1.orgid = e1.orgid) t1,
           (select o2.orgid, count(*) as equ_count
              from org o2, equ e2
             where o2.orgid = e2.orgid) t2
     where o.orgid = t1.orgid(+)
       and o.orgid = t2.orgid(+)
     group by o.Linkman, o.orgid, o.orgname, o.parentorgid;select t1.orgname, t1.Linkman, t1.emp_count, t1.equ_count
      from temp1 t1
     where t1.orgid = 组织ID
    union
    select t2.orgname, t2.Linkman, t2.emp_count, t2.equ_count
      from temp1 t2
     where t2.parentorgid = 组织ID;
      

  2.   

    我写的跟你写的差不多,不过我是把总公司下的所有分企业及部门也列出来了,所以SQL非常长,才来看看高手有没有好办法的
      

  3.   

    现在给大家说一下表结构和数据吧
    企业表org
    orgid orgname linkman parentorgid 
    100   总企业   王       -1
    201   分企业1  李      100
    202   分企业2  赵      100
    203   分企业3  钱      100
    2101  部门1    周      201
    2102  部门2    吴      201
    2201  部门3    郑      202
    2202  部门4    孙      202
    人员表emp 
    empid orgid
     1      100
     2      100
     3      201
     4      201
     5      2101
     6      2102
     7      202
    设备表跟人员表差不多,差不多就这些东西,大家给帮帮忙吧,谢谢啦,不能建临时表,sql是在vs2010,C#中写的
      

  4.   

    你这SQL好像没有吧数据汇总吧,比如选某一个分企业,没有吧下属部门的人数汇总吧
      

  5.   

    一 数据量少直接 connect by start with 所求节点二 数据量多分层聚合 grouping sets((高级,中级,低级),(高级,中级),(高级))