列出管理结构树

阅读(1040) 标签: 结果集, 循环嵌套, file, import, select, sort,

l  问题

下表是某企业员工表,记录了每位员工的ID和名字:

EMPNO

ENAME

7902

Ford

7788

Scott

7900

James

7844

Turner

7654

Martin

7521

Ward

7499

Allen

7934

Miller

7876

Adams

7782

Clark

7698

Blake

7566

Jones

7369

Smith

7839

King

下表记录了员工之间的从属关系,例如第一条记录就代表编号为7902的员工其经理是编号为7566的员工,第14条记录代表员工7839没有经理,他是最上层的经理。

EMPNO

MGR

7902

7566

7788

7566

7900

7698

7844

7698

7654

7698

7521

7698

7499

7698

7934

7782

7876

7788

7782

7839

7698

7839

7566

7839

7369

7902

7839

 

 

请返回一个结果集,描述整个表的层次关系,它的结构要求如下:

EMP_TREE

King

King – Blake

King – Blake – Allen

King – Clark

King – Clark – Miller

l  思路

大致思路:首先找出某一员工A,通过关系表找到该员工对应的上级B,再查找B的上级C,找到之后在进行循环。直至该上级已经是最高的领导者,跳出内层循环,对下一个员工的上级进行循环查找。

最后把结果排序,即可得到题目要求的结果。

l  代码

 

A

B

C

D

 

1

=file("C:\\txt\\Employees2.txt").import@t()

 

 

 

查找出员工信息

2

=file("C:\\txt\\Relationships.txt").import@t()

 

 

 

查找员工之间的关系

3

=[]

 

 

 

存储已经找到的上下级关系树

4

for A1

 

 

 

对着员工表进行循环

5

 

=A4.EMPNO

 

 

获取当前员工的编号

6

 

=A4.ENAME

 

 

获取当前员工的姓名

7

 

for

 

 

 

8

 

 

=A2.select(EMPNO==B5).MGR

 

获取当前员工的上级

9

 

 

if C8==null

break

如果当前员工没有上级,则结束内层循环,跳转至下一个员工

10

 

 

=A1.select(EMPNO==C8).ENAME

 

获取当前员工上级的姓名

11

 

 

>B6=C10+"-"+B6

 

将当前员工上级的姓名添加到B6单元格

12

 

 

>B5=C8

 

继续查找上级的上级

13

 

 

next

 

 

14

 

>A3=A3|B6

 

 

将已经找到的上下级关系树存放到A3单元格

15

=A3.sort()

 

 

 

A3单元格排序,按照题目要求显示结果

 

l  结果