求一SQL,大家帮帮忙

yx521zn 2012-02-09 04:41:34
首先是一个企业表 取名 org吧 然后组织有个字段 联系人 Linkman, 组织名orgname , 组织号,orgid ,上级组织号 parentorgid 企业里面至少有三层结构,就是有 总企业,分企业,部门 吧
再有一员工表 取名 emp吧 然后 有字段 empid , orgid
还有一设备表 取名 equ吧 然后 有字段 equid ,orgid
他们之间的关系 不说也是orgid了 但都是直属于某一层组织 不能属于上一层组织

现在求一SQL是 select 组织名 联系人 员工人数 设备数 要求,根据条件选择的组织列出该组织及其下属组织的组织信息
比如 如果选择某一分企业,就把该分企业和他的下属部门列出来,并且求该分企业的总人数和总设备数和下属各部门的人数和设备数 ,如果选择 总企业就把该总企业和下属分企业列出来 ,并列出详细信息

希望我讲的清楚了,求各位高手帮忙
...全文
141 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
buryMyLove 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yx521zn 的回复:]

引用 3 楼 burymylove 的回复:
如果选择总企业,不需要列下属分企业的下属部门吧?

--建立临时表,存储各组织直属的员工数和设备数(不建立临时表也可以,只要不嫌写一个大SQL太长)
create table temp1 t as
select o.Linkman,
o.orgid,
o.orgname,
o.parentorgid,
nvl(t1.emp_coun……
[/Quote]

长不长其实无所谓,速度快就行了
yx521zn 2012-02-10
  • 打赏
  • 举报
回复
现在给大家说一下表结构和数据吧
企业表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#中写的
yx521zn 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 burymylove 的回复:]
如果选择总企业,不需要列下属分企业的下属部门吧?

--建立临时表,存储各组织直属的员工数和设备数(不建立临时表也可以,只要不嫌写一个大SQL太长)
create table temp1 t as
select o.Linkman,
o.orgid,
o.orgname,
o.parentorgid,
nvl(t1.emp_count),
nvl(t2.equ……
[/Quote]
我写的跟你写的差不多,不过我是把总公司下的所有分企业及部门也列出来了,所以SQL非常长,才来看看高手有没有好办法的
forgetsam 2012-02-10
  • 打赏
  • 举报
回复
一 数据量少直接 connect by start with 所求节点

二 数据量多分层聚合 grouping sets((高级,中级,低级),(高级,中级),(高级))
yx521zn 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 burymylove 的回复:]
引用 4 楼 yx521zn 的回复:

引用 3 楼 burymylove 的回复:
如果选择总企业,不需要列下属分企业的下属部门吧?

--建立临时表,存储各组织直属的员工数和设备数(不建立临时表也可以,只要不嫌写一个大SQL太长)
create table temp1 t as
select o.Linkman,
o.orgid,
o.orgname,
o.parento……
[/Quote]
你这SQL好像没有吧数据汇总吧,比如选某一个分企业,没有吧下属部门的人数汇总吧
buryMyLove 2012-02-09
  • 打赏
  • 举报
回复
如果选择总企业,不需要列下属分企业的下属部门吧?

--建立临时表,存储各组织直属的员工数和设备数(不建立临时表也可以,只要不嫌写一个大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;
kingkingzhu 2012-02-09
  • 打赏
  • 举报
回复
这是在做什么啊 BI的钻取么 呵呵
用个子查询呗
benluobo 2012-02-09
  • 打赏
  • 举报
回复
希望能给出具体表结构 以及部分表数据

这样描述很难让人理解 就算写出来了也不知道是否符合你的要求

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧