度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 4268|回复: 7
打印 上一主题 下一主题

[分享] Oracle 层次树统计 汇总

  [复制链接]

67

主题

685

帖子

1815

积分

作者

Rank: 7Rank: 7Rank: 7

积分
1815
跳转到指定楼层
楼主
发表于 2020-6-7 09:35:31 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
统计部门的员工个数(员工个数=本部门人数+下级部门人数)

部门表:
层次树统计 汇总" title="Oracle 层次树统计 汇总" action-data="http%3A%2F%2Fdl.iteye.com%2Fupload%2Fattachment%2F242895%2F68da1240-04d9-388a-9ebd-b110c60f4dbd.jpg" action-type="show-slide" style="border: 0px; list-style: none; color: rgb(73, 73, 73); font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px;">

员工表:

层次树统计 汇总" title="Oracle 层次树统计 汇总" action-data="http%3A%2F%2Fdl.iteye.com%2Fupload%2Fattachment%2F242897%2F66a6a769-9c4a-3e2a-8cd4-6ff5d558d6fc.jpg" action-type="show-slide" style="border: 0px; list-style: none; color: rgb(73, 73, 73); font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px;">


sql 语句:

Sql代码  

  • with temp as(     
  •   select t1.deptid as id, t1.supdeptid parent, num, level levs,t1.deptname     
  •     from dept t1     
  •     left join (select deptid, count(t.deptid) num     
  •                  from emp t     
  •                 group by t.deptid) t2 on t1.deptid = t2.deptid     
  •    start with t1.supdeptid is null  
  •   connect by prior t1.deptid = t1.supdeptid)     
  •     select lpad(' ', 4 * levs, ' ')||id as id,lpad(' ', 4 * levs, ' ')||deptname as deptname,     
  •            (select nvl(num, 0) from temp where id = t.id) +     
  •            (select nvl(sum(num), 0)     
  •               from temp   
  •             connect by parent = prior id     
  •              start with parent = t.id) cnt     
  •       from temp t   



查询结果:


层次树统计 汇总" title="Oracle 层次树统计 汇总" action-data="http%3A%2F%2Fdl.iteye.com%2Fupload%2Fattachment%2F242900%2Fe38af876-12ed-3f9e-8d77-7cb5d67d8ab2.jpg" action-type="show-slide" style="border: 0px; list-style: none; color: rgb(73, 73, 73); font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px;">

oracle10g sql语句:
Sql代码  

  • select a.root as id, nvl(sum(b.num), 0) num  
  •   from (select id, fid, connect_by_root(id) root  
  •           from (select d.deptid as id, d.supdepid as fid from dept d start with d.supdepid is null  
  •   connect by prior d.deptid = d.supdepid)  
  •         connect by prior id = fid) a  
  •   left join (select deptid, count(t.deptid) num from emp t group by t.deptid) b on a.id =  
  •                                                                                    b.deptid  
  • group by root  
  • order by root;  


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

67

主题

685

帖子

1815

积分

作者

Rank: 7Rank: 7Rank: 7

积分
1815
沙发
 楼主| 发表于 2020-6-8 09:33:35 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|玉祥公司客服-玉祥集团客服  本站关键词:快速开发平台

GMT+8, 2024-5-3 10:44 , Processed in 0.124234 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表