描述:
针对序列的每个成员,按照指定条件生成多条记录,合并组成新的序表。
语法:
A.news(X;xi:Fi,…)
备注:
针对序列A的每个成员,与序列/整数X经过计算表达式xi后生成多条记录,合并组成新的序表。
参数:
| A | 序列。 | 
| X | 序列/整数;X为整数时 可理解为to(X),相当于对A计算了X次。 | 
| xi | 表达式,结果为字段值,xi中的~针对X而非A。 | 
| Fi | 结果序表的字段名,缺省为xi,当xi为#i时使用原列名。 | 
选项:
| @1 | 左连接,当X为空时创建一条空记录。注意是数字1。 | 
| @m | 并行计算提升性能。 | 
| @q | 只有一个xi且无F参数,当xi计算结果是序列时,返回成序列的序列。 | 
返回值:
序表
示例:
A为序列:
| 
 | A | 
 | 
| 1 | [1,2,3,4,5] | 
 | 
| 2 | =A1.news([10,20]; A1.~:a,~:b,a*b) | X为序列时,对A与X的成员逐一进行计算,将A1的成员作为字段a的值,[10,20]的成员作为字段b的值,第3列为a*b的结果值, Fi缺省直接参数xi用作为字段名: 
 | 
| 3 | =A1.news(2; A1.~:a, ~:b,a*b) | X为整数时,相当于to(2),依次对A1的成员计算2次: 
 | 
A为序表:
| 
 | A | 
 | 
| 1 | =demo.query("select top 5 ID,NAME,BIRTHDAY,DEPT,SALARY from EMPLOYEE") | 
 | 
| 2 | =A1.news(~;NAME,age(BIRTHDAY):AGE) | X为序表,~理解为A1,计算A1序表,返回的记录中含有字段NAME、AGE,AGE是根据A1的字段BIRTHDAY计算而来: 
 | 
| 3 | =A1.news(3;EID,NAME,SALARY*~:Salary) | X为整数3,对A1的成员分别计算三次,其中~可理解为当前计算次数: 
 | 
A为排列:
| 
 | A | 
 | 
| 1 | =demo.query("select top 10 EID,NAME,DEPT,GENDER,SALARY from EMPLOYEE") | 
 | 
| 2 | =A1.group(DEPT).(~.group(GENDER)) | 对A1序表根据DEPT分组,然后再继续根据GENDER分组: 
 | 
| 3 | =A2.news(~;A2.~.DEPT,A2.~.~.GENDER,A2.~.~.avg(SALARY):AvgSalary) | 取出A2分组中的DEPT和GENDER值,计算各个DEPT下GENDER的平均工资: 
 | 
参数xi中用#i :
| 
 | A | 
 | 
| 1 | =demo.query("select top 10 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") | 
 | 
| 2 | =A1.group(GENDER;~:GenderGroup,~.avg(SALARY):Avg) | A1根据GENDER做分组,并计算每组平均工资: 
 | 
| 3 | =A2.news(GenderGroup;EID,#2,GENDER, age(~.BIRTHDAY):age,SALARY+1000:Nsalary,A2.Avg:AvgSalary) | 针对A2每组计算表达式,生成记录合并成一个新序表,其中#2表示GenderGroup中的第2个字段,即NAME: 
 | 
使用@1选项,左连接:
| 
 | A | 
 | 
| 1 | =demo.query("select top 5 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") | 
 | 
| 2 | =A1.group(GENDER;~:GenderGroup) | A1根据GENDER对记录做分组: 
 | 
| 3 | =demo.query("select top 10 EID,NAME,BIRTHDAY,GENDER,SALARY from EMPLOYEE") | 
 | 
| 4 | =A3.group(GENDER;avg(SALARY):avg) | A3根据GENDER分组,计算每组的平均工资: 
 | 
| 5 | =A4.join(GENDER,A2:GENDER,GenderGroup) | 将A2与A4根据GENDER字段连接,由于A2中没有GENDER为M的对应数据,所以表连接后,对应的GenderGroup字段值为null: 
 | 
| 6 | =A5.news(GenderGroup;EID,NAME,GENDER,age(~.BIRTHDAY):age,avg:AvgSalary) | 对排列A5计算表达式后生成的记录,默认丢弃GenderGroup为空的记录: 
 | 
| 7 | =A5.news@1(GenderGroup;EID,NAME,GENDER,age(~.BIRTHDAY):age,avg:AvgSalary) | 使用@1参数,当排列X为空时,创建一条空记录: 
 | 
使用@q选项,返回序列的序列:
| 
 | A | 
 | 
| 1 | =file("emp.txt").cursor@w().fetch() | 返回内容: 
 | 
| 2 | =A1.news@q(2;[A1.~(2),A1.~(3)*~]) | 使用@q选项,只有一个xi参数无F参数且xi计算结果为序列,结果返回序列的序列: 
 | 
相关概念: