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 结果