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

求教一个树形查询+聚合的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

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