列出管理结构树
问题
下表是某企业员工表,记录了每位员工的 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 |
… |
思路
大致思路:首先找出某一员工 A,通过关系表找到该员工对应的上级 B,再查找 B 的上级 C,找到之后在进行循环。直至该上级已经是最高的领导者,跳出内层循环,对下一个员工的上级进行循环查找。
最后把结果排序,即可得到题目要求的结果。
代码
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 单元格排序,按照题目要求显示结果 |
英文版
数据文件
Employees2.txt
Relationships.txt
用 SPL XLL 跟着练习一下:
或者: