将排列按照另一个序列进行排序/对齐
语法:
P.align(A:x,y) |
x,y省略时,以P当前记录与A中成员对齐 |
P.align(n,y) |
等同于P.align(to(n),y),支持@r |
备注:
通过关联字段x和y,将P的记录按照A对齐。对照排列P计算y的值,当计算结果和A中的x的值相等则两者对齐。
此函数主要应用于主子表的情况, x表达式往往就是子表的外键字段,根据外键与主表的记录进行对比,如果相同,则对齐。
一般情况,主子表之间是一对多的关系,即A中一条记录和P中多条记录关联,因此把P中关联的多条记录组成一个序列作为成员存在结果序列里。结果序列的成员个数和A是相同的。
参数:
P |
子排列/子序表 |
A |
用于对齐的序列或排列,一般是主表 |
x |
A中用于关联的字段或者字段表达式,缺省解释为~ |
y |
P的对齐表达式,缺省解释为P.~ |
n |
整数 |
选项:
@a |
返回P记录按照A成员对齐的所有成员,并且把结果序列分组。缺省仅返回第一个成员。 |
@b |
当A为有序序列时,使用二分法查询 |
@r |
y为数列,y中每个成员作为对齐位置,将P重复分组到n中指定位置 |
@p |
返回值由成员在P中的序号构成 |
@n |
返回P记录按照A成员对齐的所有成员,并且结果集多出一组,用于存放对不上的成员 |
@s |
P中记录按照A中成员的次序排序,其中无法与A对应的成员排在最后。 |
返回值:
对齐后的P
示例:
Ø 子表向主表对齐后计算
|
A |
|
1 |
=demo.query("select * from DEPARTMENT ") |
|
2 |
=demo.query("select * from EMPLOYEE ") |
|
3 |
=A2.align@a(A1:DEPT,DEPT) |
将EMPLOYEE表按照DEPARTMENT表对齐,且返回所有成员 |
4 |
=A1.new(DEPT, A3(#).count():NUMBER) |
然后将A3和A1关联计算 |
5 |
=A2.align(A1:DEPT,DEPT) |
缺省返回第一个符合条件的成员 |
Ø 用于特殊排序
|
A |
|
1 |
=demo.query("select * from score") |
|
2 |
=A1.sort(class) |
使用sort按照class排序,class字段按照four/one/three/two展示 |
3 |
=A1.group(class) |
使用group按照class分组,class字段按照four/one/three/two展示 |
4 |
=["class one","class two","class three","class four"] |
|
5 |
=A1.align@a(A4,class) |
使用align@a选项对齐所有成员,使得class字段按照A4的顺序排序,并且把结果序列分组 |
Ø 整数对齐,常用于加快运算速度
|
A |
|
1 |
=demo.query("select * from FAMILY") |
|
2 |
=demo.query("select * from EMPLOYEE where EID<12") |
|
3 |
=A1.align@ba(A2:EID,EID) |
A2有序,使用二分法加快查找速度 |
Ø @r选项,将主表按照数列指定的位置和子表重复对齐
|
A |
|
1 |
=demo.query("select * from FAMILY") |
|
2 |
=demo.query("select * from EMPLOYEE") |
|
3 |
=A1.derive(A2.pselect@a(EID==A1.EID): SubtableNo) |
先找出与FAMILY表对应的EMPLOYEE记录序号,把序号作为数列存储在SubtableNo字段里 |
4 |
=A3.align@r(11,SubtableNo) |
利用SubtableNo字段直接和n对齐 |
5 |
=A3.align@rp(11,SubtableNo) |
增加@p选项,返回记录序号,不是记录本身 |
Ø @n选项,将主表和子表对齐返回所有成员,最后一组结果集存放对不上的成员
|
A |
|
1 |
=demo.query("select * from STUDENTS") |
|
2 |
=demo.query("select * from STUDENTS1") |
|
3 |
=A1.align@n(A2:ID,ID) |
最后一行的成员为对不上的一组 |
Ø @s选项,将子表记录按照主表成员排序。
|
A |
|
1 |
=demo.query("select * from STUDENTS") |
|
2 |
=demo.query("select * from STUDENTS1 order by ID desc ") |
|
3 |
=A1.align@s(A2:ID,ID) |
使用@s选项,将A1按照A2成员进行排序
|