假定我们有一个二维数组成绩表ScoreList,有语文成绩,数学成绩,英语成绩,历史成绩,地理成绩等等,结果如下:
学号姓名英语成绩语文成绩数学成绩 ....
01 张三 80 90 ..
02 李四 60 70 ..
03 王五 90 80 ..
04 赵六 50 90 ..
05 钱七 88 89 ..
假定我们要从这个成绩表中生成一个英语成绩表,只需要英语成绩和学号,姓名列,如果用矩阵计算的子矩阵,我们可以使用如下方法:
ScoreList[:,array("学号","姓名","英语成绩")]
但是如果在查询的过程中还需要返回计算的内容,那么这种直接取子矩阵的算符就无法支持了。例如,我们需要获得英语成绩以及文科平均成绩,这个时候select就起到作用了。
我们来看一下上边的需求使用select是如何实现的:
R1:=select *,RoundTo((["英语成绩"]+["语文成绩"]+["历史成绩"]+["地理成绩"])/4,2) as "文科成绩" from ScoreList end;
R1的结果集在原有结果集的基础上增加了文科成绩两列,我们可以看到select的使用的方法,select 和from之间是所需要的返回内容列表,多个返回内容之间用逗号进行间隔,*代表原结果集的所有列,from后则跟着所需查询的结果集,最后select以end作为结束。而每个返回的内容可以使用as 列名来标示返回的字段列,也可以省略,一旦省略,select会自动安排列名(如果返回内容是[]表达式,则列名则和原列名保持一致,否则列名会自动用"Expr1","Expr2"..替代),As后的列名可以是字符串,也可以是整数。
我们从例子中可以看到,返回的内容中支持计算,允许调用TSL支持的各类函数(在例子中我们调用了舍入函数RoundTo),而访问列值则是采用[]来访问的,在方括号中我们加入字段下标即可。(字段下标可以是常量,也可以是变量,对于整数下标的矩阵,我们用[0]就表示下标为0的列)。