T.news(A/cs:K…,x:C,...;wi)

阅读(361) 标签: 序表, 游标, 指定, 合并生成,

描述:

根据序表/游标的键与组表的字段对应,返回由指定字段组成的序表/游标。

语法:

T.news(A/cs:K…,x:C,…;wi)

备注:

组表T为子表,序表A/游标cs为主表,TA/ cs是多对一的关系,按A/cs的键(/)字段与T(从头开始)的字段对应,返回由x:C组成的序表/游标。要求A/cs对键(/)有序,且A/cs的键(/)T前面字段同序。

参数为A时返回序表,为cs时返回游标/多路游标。

返回结果集向T对齐并设置维/键,复制主表记录。

参数:

T

组表。

A/cs

序表/游标/组表游标。

K

A/cs字段,有K时用KT前面字段对应,K缺省用A/cs(/)多个K时用 : 隔开。

x

字段名/聚合函数,支持count/sum/max/min/avg

C

列别名。

wi

T的过滤条件,缺省读取全集,多个条件之间用逗号隔开,为AND关系。除常规的过滤表达式外,过滤条件中还支持如下几种写法,其中K表示实表T中的非键字段:

1K=w

w通常使用表达式Ti.find(K)Ti.pfind(K)Ti为序表,wnullfalse时将被过滤掉;当w为表达式Ti.find(K)且被选出字段C,...中包含K时,K将被赋值为Ti的指引字段; w为表达式Ti.pfind(K)且被选出字段C,...中包含K时,K将被赋值为KTi 中的序号。

2(K1=w1,Ki=wi,w)

Ki=wi为赋值表达式,参数wi通常可以使用表达式Ti.find(Ki)Ti.pfind(K)Ti为序表;当wi为表达式Ti.find(Ki)且被选出字段C,...中包含Ki时。Ki将被赋值为Ti的指引字段; wi为表达式Ti.pfind(Ki)且被选出字段C,...中包含Ki时,Ki将被赋值为KiTi 中的序号。

w为过滤表达式, w中可引用Ki

3K:Ti

Ti为序表,用实表中Ki的值与Ti的键值作对比,匹配不上的将被过滤掉;当选出字段C,...中包含K时,K将被赋值为Ti的指引字段。

4K:Ti:null

符合K:Ti的记录将被过滤掉。

选项:

@r

聚合子表数据,返回结果集向A/cs对齐。

返回值:

序表/游标

示例:

 

A

 

1

=connect("demo").cursor("SELECT STUDENTID,CLASS,SUBJECT,SCORE FROM SCORES")

返回游标。

2

=file("scores-news.ctx")

 

3

=A2.create@y(#STUDENTID,#CLASS,SUBJECT,SCORE)

创建组表,STUDENTIDCLASS为组表的维。

4

=A3.append@i(A1)

5

=connect("demo").query("SELECT ID,NAME,GENDER,AGE FROM STUDENTS")

返回序表

6

=A4.news(A5:ID,CLASS,STUDENTID,NAME,GENDER,SUBJECT,SCORE)

A4为子表,A5为主表,按序表A5的字段IDT的前面字段即STUDENTID对应,返回由CLASS,STUDENTID,NAME,GENDER,SUBJECT,SCORE字段组成的序表,复制主表记录,返回结果如下:

7

=A5.keys(ID)

设置A5序表的键为ID

8

=A4.news(A7,CLASS,STUDENTID,NAME,GENDER,SUBJECT,SCORE)

省略参数K,按A7的键与组表前面的字段对应,返回结果同A6

9

=A4.news@r(A7,NAME,GENDER,sum(SCORE):TotalScore)

使用@r选项,聚合子表数据:

10

=A4.news(A7,CLASS,STUDENTID,NAME,GENDER,SUBJECT,SCORE;CLASS=="Class one",SUBJECT=="Math")

关联计算时对A4的数据进行过滤,过滤条件为CLASS=="Class one"并且SUBJECT=="Math"

多个K时:

 

A

 

1

=file("sco.ctx").open()

打开组表,组表数据内容如下:

2

=file("stu.txt").import@t()

返回序表:

3

=A1.news(A2:Class:StudentID,NAME,SUBJECT,SCORE)

A1为子表,A2为主表,按序表A2的字段ClassStudentIDT的前面字段即ClassStudentID对应,返回由NAME,SUBJECT,SCORE字段组成的序表,复制主表记录,返回结果如下:

4

=A1.news@r(A2:Class:StudentID,NAME,sum(SCORE):TotalScore)

使用@r选项,聚合子表数据:

多种过滤方式

 

A

 

1

=demo.cursor("select STUDENTID,CLASS,SUBJECT,SCORE from SCORES")

游标中的数据如下:

2

=file("scores.ctx")

 

3

=A2.create@y(#STUDENTID,#CLASS,SUBJECT,SCORE )

创建组表

4

=A3.append@i(A1)

A1游标中的数据追加到组表基表中

5

=demo.query("select  ID,NAME,GENDER,AGE  from STUDENTS")

返回序表

6

=A3.news(A5:ID,STUDENTID,NAME,SUBJECT,SCORE)

将组表的键值与序表字段对应,取出组表字段,返回序表

7

=create(Subject,Num).record(["PE",01,"Math",02,"History",03]).keys(Subject)

生成Subject为键的序表

8

=A3.news(A5:ID,NAME,SUBJECT,SCORE;SUBJECT=A7.find(SUBJECT))

使用K=w过滤方式,wTi.find(K),实表中使SUBJECT=A7.find(SUBJECT)计算结果为nullfalse的记录过滤掉;SUBJECT为选出字段,赋值为序表A7的指引字段

9

=A3.news(A5:ID,NAME,SUBJECT,SCORE;SUBJECT=A7.pfind(SUBJECT))

使用K=w过滤方式,wTi.pfind(K),实表中使SUBJECT=A7.pfind(SUBJECT)计算结果为nullfalse的记录过滤掉;SUBJECT为选出字段,赋值为SUBJECT在序表A7的序号

10

=A3.news(A5:ID,NAME,SUBJECT,SCORE;SUBJECT:A7)

使用K:Ti过滤方式,用实表中SUBJECT的值与序表的键值作对比,匹配不上的将被过滤掉

11

=A3.news(A5:ID,NAME,SCORE;SUBJECT:A7)

K不被选出的情况,SUBJECT不是选出字段,仅过滤

12

=A3.news(A5:ID,NAME,SUBJECT,SCORE;SUBJECT:A7:null)

使用K:Ti:null 过滤方式,用实表中SUBJECT的值与序表的键值作对比,可以匹配上的将被过滤掉

13

=create(Score,Level).record([90,"A",80,"B",70,"C",60,"D"]).keys(Score)

返回键为Score的序表

14

=A3.news(A5:ID,NAME,SUBJECT,SCORE;(SCORE=A13.find(SCORE),

SUBJECT=A7.find(SUBJECT),SCORE!=null&&SUBJECT!=null))

使用(K1=w1,Ki=wi,w)过滤方式,返回符合所有条件的记录

 

注意:T.new()T.news()的区别,T.new()适用于TA/cs一对多关系,T.news()适用于TA/cs是多对一关系。