switch()

阅读(2409) 标签: switch,

本章介绍switch()函数的多种用法。

P.switch(Fi,Ai:x;…)

描述:

编码字段的键值和指引记录之间切换。

语法:

P.switch(Fi, Ai:x;…)

备注:

Fi在键值和Ai的指引记录之间切换,键值为Ai指引记录的主键,返回切换后的序表。

比如Attendance表里的employeeID字段,里面可能存的是employeeID的码值,也可能存Employee表的对应记录,此时可以用switch()在两者之间切换。

外键有索引表则用索引,没有则建立自行管理。

参数:

P

序表/排列。

Fi

P的键,当只有Fi参数时,Fi存的是码表Ai的记录。通过switch函数切换成码值。

Fi, Ai

当存在参数Ai时,FiP的编码字段,存的是码值。通过switch函数切换成Ai的记录。找不到填为null。匹配条件为FiAi的主键相等。

Fi, Ai:x

当存在参数Ai和主键x时,表示从Ai中选出第一条x值和Fi相同的记录,放到字段Fi中,特别地,x#时直接用序号定位。

选项:

(Fi, Ai Fi, Ai:x有效)

@i

过程中找不到任何F对应值则删除该记录。

@d

@i相反,只保留找不到的记录,此时不把F填成null

@1

P中某条记录的F值在B中找不到,则生成一条B结构的记录,主键值设为F

返回值:

序表

示例:

 

A

 

1

=demo.query("select * from DEPARTMENT").keys(DEPT)

 

2

=demo.query("select * from EMPLOYEE where EID < 10")

 

3

=demo.query("select * from DEPARTMENT" ).cursor().memory().keys(DEPT)

返回内表。

4

>A2.switch(DEPT,A1:DEPT)

 

5

>A2.switch(DEPT,A3:DEPT)

A3为内表,同上。

6

>A2.switch(DEPT)

A2"DEPT"字段对应的序表的记录转换为字段值。

7

>A2.switch@i(DEPT,A1)

找不到任何DEPT对应值则删除该记录。

8

>A2.switch@d(DEPT,A1)

只保留找不到任何DEPT对应值的记录。

9

>A1.delete(6)

 

10

=A2.switch(DEPT,A2:DEPT)

11

=A2.switch@1(DEPT,A2:DEPT)

相关概念:

cs.switch()

ch.switch(Fi,Ai:x;…)

描述:

管道中附加指引字段切换动作后返回原管道。

语法:

ch.switch(Fi,Ai:x;…)

备注:

管道ch中附加计算,将Fi字段值切换为Ai的记录,返回原管道ch

xAi的主键或逻辑主键,匹配条件为Fi等于x。默认情况下,Fi找不到Ai可匹配的记录时显示为空。

该函数属于附加计算动作

参数:

ch

管道。

Fi

ch中的字段

Ai

序表/排列。

x

Ai的主键或逻辑主键,如果Ai设置了主键为x,则参数x可以省略。

选项:

@i

过程中找不到任何Fi对应值则删除该记录。

@d

@i相反,只保留找不到的记录。

@1

ch中某条记录的Fi值在Ai中找不到,则生成一条Ai结构的记录,主键值设为x。注意是数字1

返回值:

管道

示例:

   xAi的主键:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT DEPT,MANAGER FROM DEPARTMENT").keys(DEPT)

返回DEPT为键的序表:

3

=channel()

创建管道。

4

=A3.switch(DEPT,A2)

管道附加计算,将DEPT的字段值切换为指引字段指向A2的记录,DEPTA2的键,所以参数x可省略,返回到A3管道。

5

=A4.fetch()

执行结果集函数,保留管道当前数据。

6

=A1.push(A3)

A1游标中的数据推送到管道,此时数据不会立即被推送到管道;

7

=A1.skip()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

8

=A3.result()

获取管道计算结果:

xAi的主键或逻辑主键:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=channel(A1)

创建管道并将A1游标中的数据推送到管道,此时数据不会立即被推送到管道。

4

=A3.switch(DEPT,A2:DEPT)

管道附加计算,将DEPT字段匹配序表A2中对应的DEPT字段值,无法匹配则显示为空,返回到A3管道。

5

=A4.fetch()

执行结果集函数,保留管道当前数据。

6

=A1.skip()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

7

=A3.result()

获取管道计算结果:

使用@i选项,字段不匹配的记录直接删除:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=channel(A1)

创建管道并将A1游标中的数据推送到管道,此时数据不会立即被推送到管道。

4

=A3.switch@i(DEPT,A2:DEPT)

管道附加,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@i选项,无法匹配则删除整条记录,返回到A3管道。

5

=A4.fetch()

执行结果集函数,保留管道当前数据。

6

=A1.skip()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

7

=A3.result()

获取管道计算结果:

  使用@d选项,与@i相反,只保留匹配不到的记录: 

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=channel(A1)

创建管道并将A1游标中的数据推送到管道,此时数据不会立即被推送到管道。

4

=A3.switch@i(DEPT,A2:DEPT)

管道附加,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@d选项,只保留匹配不到的记录,返回到A3管道。

5

=A4.fetch()

执行结果集函数,保留管道当前数据。

6

=A1.skip()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

7

=A3.result()

获取管道计算结果:

  使用@1选项: 

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=channel(A1)

创建管道并将A1游标中的数据推送到管道,此时数据不会立即被推送到管道。

4

=A3.switch@i(DEPT,A2:DEPT)

管道附加,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@1选项,匹配不到时则生成一条A2结构的记录,返回到A3管道。

5

=A4.fetch()

执行结果集函数,保留管道当前数据。

6

=A1.skip()

A1游标执行取数动作,此时数据才会被推送到管道,然后管道执行计算并记录结果。

7

=A3.result()

获取管道计算结果:

 

cs.switch(Fi,Ai:x;…)

描述:

游标中附加指引字段切换动作后返回原游标。

语法:

cs.switch(Fi,Ai:x;…)

备注:

游标cs中附加计算,将Fi字段值切换为Ai的记录,返回原游标csxAi的主键或逻辑主键,匹配条件为Fi等于x;默认情况下,Fi找不到Ai可匹配的记录时显示为空。

该函数属于延迟计算函数。

参数:

cs

游标/多路游标。

Fi

cs中的字段。

Ai

序表/排列。

x

Ai的主键或逻辑主键,如果Ai设置了主键为x,则参数x可以省略。

选项:

@i

过程中找不到任何Fi对应值则删除该记录

@d

@i相反,只保留找不到的记录。

@1

cs中某条记录的Fi值在Ai中找不到,则生成一条Ai结构的记录,主键值设为x。注意是数字1

返回值:

游标

示例:

xAi的主键:

 

A

 

1

=demo.cursor("SELECT top 5 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT DEPT,MANAGER FROM DEPARTMENT").keys(DEPT)

返回以DEPT为键的序表:

3

=A1.switch(DEPT,A2)

游标A1中附加计算,将DEPT的字段值切换为指引字段指向A2的记录,DEPTA2的键,所以参数x可省略,返回A1游标。

4

=A1.fetch()

读取游标A1执行A3计算后的数据:

xAi的主键或逻辑主键:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=A1.switch(DEPT,A2:DEPT)

游标A1中附加计算,将DEPT字段匹配序表A2中对应的DEPT字段值,无法匹配则显示为空,返回A1游标。

4

=A1.fetch()

读取游标A1执行A3计算后的数据:

使用@i选项,字段不匹配的记录直接删除:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=A1.switch@i(DEPT,A2:DEPT)

游标A1中附加计算,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@i选项,无法匹配则删除整条记录,返回A1游标。

4

=A1.fetch()

读取游标A1执行A3计算后的数据:

使用@d选项,@i相反,只保留匹配不到的记录

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=A1.switch@d(DEPT,A2:DEPT)

游标A1中附加计算,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@d选项,只保留匹配不到的记录,返回A1游标。

4

=A1.fetch()

读取游标A1执行A3计算后的数据:

使用@1选项:

 

A

 

1

=demo.cursor("SELECT top 10 EID,DEPT,NAME FROM EMPLOYEE")

返回游标,数据内容如下:

2

=demo.query("SELECT top 6 DEPT,MANAGER FROM DEPARTMENT")

返回序表:

3

=A1.switch@1(DEPT,A2:DEPT)

游标A1中附加计算,将DEPT字段匹配序表A2中对应的DEPT字段值,使用@1选项,匹配不到时则生成一条A2结构的记录,返回A1游标。

4

=A1.fetch()

读取游标A1执行A3计算后的数据:

 

相关概念:

P.switch()

cs.switch(Fi,Ai:x;…)

描述:

将集群游标中指定的值字段切换为指引字段。

语法:

cs.switch(Fi,Ai:x;…)

备注:

将游标cs的字段Fi的值切换为Ai的记录,xAi的主键或逻辑主键,匹配条件为Fi等于x;默认情况下,Fi找不到Ai可匹配的记录时显示为空。

参数:

cs

游标、多路游标、集群游标。

Fi

cs中的字段。

Ai

集群内表。

x

Ai的主键或逻辑主键,如果Ai设置了主键为x,则参数x可以省略。

选项:

@c

集群表有分布时,计算也均不做跨机引用,认为引用记录总在本机。

返回值:

原游标

示例:

 

A

 

1

=demo.cursor("SELECT * FROM DEPARTMENT")

返回游标。

2

[192.168.0.110:8281,192.168.18.143:8281]

 

3

=file("emp_1.ctx":[1,2], A2)

 

4

=A3.open()

打开集群组表。

5

=A4.cursor()

返回集群游标。

6

=A5.groups@c(DEPT:dept;sum(SALARY):totalSalary)

返回集群内表。

7

=A1.switch@c(DEPT,A6:dept)

将游标中的DEPT字段切换为指引字段,返回原游标。

8

=A7.fetch()

取游标中的数据:

T.switch(Fi,Ai:x;…)

描述:

虚表中定义指引字段切换操作后返回新虚表。

语法:

T.switch(Fi,Ai:x;…)

备注:

虚表T中定义计算,将T的字段Fi的值切换为Ai的记录,返回新虚表。xAi的主键或逻辑主键,匹配条件为Fi等于x;默认情况下,Fi找不到Ai可匹配的记录时显示为空。

参数:

T

虚表。

Fi

T中的字段。

Ai

序表/排列。

x

Ai的主键或逻辑主键,如果Ai设置了主键为x,则参数x可以省略。

选项:

@i

过程中找不到任何F对应值则删除该记录。

@d

@i相反,只保留找不到的记录。

@1

T中某条记录的F值在Ai中找不到,则生成一条Ai结构的记录,主键值设为x

返回值:

虚表

示例:

 

A

B

 

1

=create(file).record(["emp_news.ctx"])

 

emp_news.ctx组表内容如下:

2

=pseudo(A1)

 

由组表产生虚表。

3

=demo.query("SELECT top 4 * FROM DEPARTMENT").keys(DEPT)

 

返回序表,并设置字段DEPT为序表的键:

 

4

=A2.switch(DEPT,A3)

=A4.import()

执行A4格中的表达式,对虚表A2定义计算,将虚表中DEPT字段值转成序表A3中的指引字段,返回成新虚表。

执行B4格中的表达式,读取A4虚表中的数据,此时A2虚表执行A4中定义的计算操作,返回内容如下:

5

=A2.switch@i(DEPT,A3)

=A5.import()

使用@i选项,删除掉匹配不上的记录,B5执行计算后返回结果如下:

6

=A2.switch@d(DEPT,A3)

=A6.cursor().fetch()

使用@d选项,虚表中只保留匹配不上的记录,B6执行计算后返回结果如下:

7

=A2.switch@1(DEPT,A3)

=A7.cursor().fetch()

使用@1选项,虚表中的DEPT值在序表A3中找不到时,生成一条A3结构的记录,主键值设为DEPTB7执行计算后返回结果如下: