l 问题
此问题的目的是用文本模拟出直方图。
下图是员工信息表,其中DEPTNO为员工所在的部门。
EMPNO |
ENAME |
DEPTNO |
7934 |
Miller |
10 |
7782 |
Clark |
10 |
7839 |
King |
10 |
7902 |
Ford |
20 |
7788 |
Scott |
20 |
7876 |
Adams |
20 |
7566 |
Jones |
20 |
7369 |
Smith |
20 |
7900 |
James |
30 |
7844 |
Turner |
30 |
7654 |
Martin |
30 |
7521 |
Ward |
30 |
7499 |
Allen |
30 |
7698 |
Blake |
30 |
现在要用“文本直方图”显示出每个部门的职员数,一个星号“*”表示一个员工,使用横向的直方图得到的结果集应该如下:
DEPTNO |
CNT |
10 |
*** |
20 |
***** |
30 |
****** |
而使用纵向的直方图得到的结果集应该如下:
D10 |
D20 |
D30 |
|
|
* |
|
* |
* |
|
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
请编写代码生成这种结果集。
l 思路
1. 横向直方图:首先创建一序表,包含DEPTNO和CNT两个字段,将DEPTNO表按照部门分组,对着分组后的结果进行循环,依次插入部门和部门人数个*;
2. 纵向直方图:首先新建一序表,字段名为动态读取的部门,依次对各个部门的人数进行统计,取得最大值,向序表中插入最大值条空记录,对着序表逐列循环,竖着修改序表,向序表中插入*
l 代码
|
A |
B |
|
1 |
=file("C:\\txt\\DEPTNO.txt").import@t() |
|
读部门表 |
2 |
/横向的直方图 |
|
|
3 |
=create(DEPTNO,CNT) |
|
构造结果序表 |
4 |
=A1.group(DEPTNO) |
|
按部门分组 |
5 |
for A4 |
|
|
6 |
|
=A3.insert(0,A5.DEPTNO,fill("*",A5.count())) |
向序表中插入记录,第一个字段为部门,第二个字段为部门的人数个* |
7 |
/纵向直方图 |
|
|
8 |
=create(${A3.(DEPTNO).concat(",")}) |
|
结果序表,字段名动态读取部门 |
9 |
=A4.(~.count()) |
|
计算部门的人数 |
10 |
=A9.max() |
|
计算最大部门的人数 |
11 |
>A8.insert(A10) |
|
根据最大部门数插入空记录 |
12 |
for A9 |
|
|
13 |
|
>A8.to(-A12).field(#A12,"*") |
逐列填写* |
l 结果
A3中返回的横向直方图
A8中返回的纵向直方图