select de.dept_name,de.unified_code2 from cimsuser.t_org_department de3 start with de.unified_code= ‘DP00004‘4 connect by prior de.unified_code = de.parent_org_unified_code;
其中,DP00004是我需要查询的根部门,查询结果为遍历后的部门及其下属部门信息,执行步骤为:
第一步:从根节点开始;第二步:访问该节点;第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;第四步:若该节点为根节点,则访问完毕,否则执行第五步;第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是中序遍历树的过程。
Oracle中遍历查询下属部门信息
标签:
小编还为您整理了以下内容,可能对您也有帮助:
oracle查询某公司及下属机构,并将层级显示出来
WITH tb AS
( SELECT 101 id , 1 aid , 'xxx公司' name FROM al
UNION ALL
SELECT 10021 , 101 , '财务部' FROM al
UNION ALL
SELECT 10022 , 101 , '销售部' FROM al
UNION ALL
SELECT 100030 , 10021 , '采购' FROM al
UNION ALL
SELECT 100030 , 10021 , '订购' FROM al
)
SELECT level,
id,
name
FROM tb
START WITH aid =1
CONNECT BY prior id=aid
ORDER BY level;
追问好的 谢了
oracle查询某公司及下属机构,并将层级显示出来
WITH tb AS
( SELECT 101 id , 1 aid , 'xxx公司' name FROM al
UNION ALL
SELECT 10021 , 101 , '财务部' FROM al
UNION ALL
SELECT 10022 , 101 , '销售部' FROM al
UNION ALL
SELECT 100030 , 10021 , '采购' FROM al
UNION ALL
SELECT 100030 , 10021 , '订购' FROM al
)
SELECT level,
id,
name
FROM tb
START WITH aid =1
CONNECT BY prior id=aid
ORDER BY level;
追问好的 谢了
oracle 多级查询(查询某级及所有下级的记录)?
select * from (select * from 表2 left join 表1 on 表1.分类=表2.物料分类) start with 上级分类=02 connect by prior 分类=上级分类
oracle 多级查询(查询某级及所有下级的记录)?
select * from (select * from 表2 left join 表1 on 表1.分类=表2.物料分类) start with 上级分类=02 connect by prior 分类=上级分类
如何用oracle查询出部门名称,部门员工数,部门平均工资,部门最低工资雇员的姓名,及工资等级
这是oracle中默认用户scott下的表。
本问题涉及到三张表,数据分别如下:
emp表:
dept表:
salgrade表:
按题目要求,sql语句如下:
select b.dname 部门名称,b.counts 部门员工数,b.avgsal 部门平均工资,b.minsal 部门最低工资,a.ename 姓名,c.grade 工资等级
from emp a,
(select b.deptno,b.dname,count(*) counts,round(avg(sal),2) avgsal,min(sal) minsal
from emp a,dept b,salgrade c
where a.deptno=b.deptno and a.deptno=b.deptno
and a.sal between c.losal and hisal
group by b.deptno,b.dname) b,
salgrade c
where a.sal=b.minsal
and a.sal between c.losal and c.hisal
结果如图:
oracle里查询的题 列出所有“CLERK”办事员的姓名及其部门名称,部门的人数。(是部门的人数)求大神解决
额。。。,需求不是太清晰。部门人数?假如这个部门有6个人,有三个人是CLERK办事员,那么是显示3还是6。如果是6,那么就利用子查询关联,在子查询中group by,然后再关联。如果是3,那么只能查询两遍了,然后自连接。
另外,这个个人感觉不用左连接,用inner join就好。
如果资源允许的话,开窗函数也能解决这个问题,不过只能解决3,解决不了6,如果要的是6,还是要有一个子查询才行。