日期:2014-05-16  浏览次数:20793 次

求教一个树形查询+聚合的sql,很难,求高手
表A存放部门人数,现在想统计各个部门及其下级部门的人数

select level as alevel,A.depart_code,A.depart_name,A.pnum  
  from A
   start with A.depart_code='d001' connect by prior A.depart_code=A.super_depart_code


查询结果:
1 d001 销售部本部 8
2 d101 销售部分部1 7
2 d102 销售部分部2 5
3 d201 分部管理处 4
3 d202 分部人事办 3

现在想实现查询结果向下钻取展示,如:
部门,人数
销售部本部合计,27
   销售部本部,8
   销售部分部1合计,7
     销售部分部1,7
   销售部分部2合计,12
     销售部分部2,5
     分部管理处,4
     分部人事办,3
------解决方案--------------------
SELECT lv 
------解决方案--------------------
 nvl(depart_name, 0), pnum
  FROM (
        
        SELECT a.depart_name, SUM(pnum) pnum, LEVEL lv
          FROM a
         START WITH depart_code = 'd001'
        CONNECT BY PRIOR depart_code = super_depart_code
         GROUP BY ROLLUP(LEVEL, a.depart_name))
 ORDER BY 1

再做些修改应该差不多格式了,要把合计 这个名称替换出来 比较麻烦 ,可以建表的