switch()

阅读(1095) 标签: 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;…)

备注:

Fi在键值和Ai的指引记录之间切换,键值为Ai指引记录的主键。

该函数属于附加计算动作

参数:

ch

管道

Fi

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

Fi, Ai

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

Fi, Ai:x

当参数存在Aix时,表示从Ai中选出第一条x值和Fi相同的记录,放到字段Fi

选项:

@i

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

@d

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

@1

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

返回值:

管道

示例:

 

A

 

1

=demo.cursor("select EID,SURNAME,DEPT,STATE from  EMPLOYEE")

 

2

=demo.query("select STATEID,NAME from STATES").keys(STATEID)

3

=channel()

创建管道

4

=A1.push(A3)

将游标A1中的数据推送到管道A3

5

=A3.switch(STATE,A2:NAME)

A2表中选出第一条NAME键值与管道中STATE键值相同的记录作为指引记录,替换管道中的STATE,切换后的键值为指引字段的主键,即STATEID

6

=A5.fetch()

A3管道附加结果集函数ch.fetch(),保留管道当前数据

7

=A1.fetch()

A1游标中取数

8

=A3.result()

A1"STATE"字段值转成对应的A2中的记录。

9

=demo.cursor("select EID,SURNAME,DEPT,STATE from  EMPLOYEE where EID<20")

返回游标

10

=demo.query("select STATEID,NAME from STATES where STATEID<15").keys(NAME)

返回主键为NAME的序表

11

=channel(A9)

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

12

=A11.switch(STATE,A10)

参数x缺省用A10的主键,切换后的键值为NAME

13

=A12.fetch()

 

14

=A9.skip()

 

15

=A11.result()

16

=demo.cursor("select EID,SURNAME,DEPT,STATE from  EMPLOYEE where EID<20")

 

17

=demo.query("select STATEID,NAME from STATES where STATEID<15").keys(NAME)

A10

18

=channel()

创建管道

19

=A18.switch@i(STATE,A17)

使用@i选项,在A17序表中找不到与STATE对应的值时,删除该条记录

20

=A18.fetch()

 

21

=A16.push(A18)

将游标中的数据推送到管道

22

=A18.result()

获取管道中的数据

23

=demo.cursor("select EID,SURNAME,DEPT,STATE from  EMPLOYEE where EID<20")

 

24

=demo.query("select STATEID,NAME from STATES where STATEID<15").keys(STATEID)

A2

25

=channel()

创建管道

26

=A25.switch@1(STATE,A24:NAME)

A24表中选出第一条NAME键值与管道中STATE键值相同的记录作为指引记录,替换管道中的STATE,切换后的键值为指引字段的主键,即STATEID;若没有找到匹配的STATEID,则生成一条A24结构的记录,主键设为NAME

27

=A25.fetch()

 

28

=A23.push(A25)

将游标中的数据推送到管道

29

=A25.result()

获取管道中的数据

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可以省略

选项:

@i

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

@d

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

@1

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

返回值:

原游标cs

示例:

 

A

 

1

=demo.cursor("SELECT EMPLOYEE.EID,EMPLOYEE.DEPT,EMPLOYEE.NAME,

EMPLOYEE.SALARY FROM EMPLOYEE  where EID<11")

返回取数游标,游标中的数据如下:

2

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

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

 

3

=A1.switch(DEPT,A2)

DEPTA2序表的键,所以参数x可省略。

4

=A3.fetch()

A1"DEPT"字段值转成对应的A2中的指引字段。

例如点击第一行中的R&D,则显示下面的记录:

5

=demo.cursor("SELECT EMPLOYEE.EID,EMPLOYEE.DEPT,EMPLOYEE.NAME,EMPLOYEE.SALARY FROM EMPLOYEE  where EID<11")

返回取数游标,游标中的数据如下:

6

=demo.query("SELECT * FROM DEPARTMENT where MANAGER<5")

返回序表,结果如下:

7

=A5.switch(DEPT,A6:DEPT)

F匹配序表中对应的字段值,有部分的记录中,F找不到对应的值,则显示为空

8

=A7.fetch()

9

=demo.cursor("SELECT EMPLOYEE.EID,EMPLOYEE.DEPT,EMPLOYEE.NAME,EMPLOYEE.SALARY FROM EMPLOYEE  where EID<11")

A5

10

=demo.query("SELECT * FROM DEPARTMENT where MANAGER<5")

A6

11

=A9.switch@i(DEPT,A10:DEPT)

使用@i选项表示找不到任何F对应值则删除该记录

12

=A11.fetch()

13

=demo.cursor("SELECT EMPLOYEE.EID,EMPLOYEE.DEPT,EMPLOYEE.NAME,EMPLOYEE.SALARY FROM EMPLOYEE  where EID<11")

A5

14

=demo.query("SELECT * FROM DEPARTMENT where MANAGER<5")

A6

15

=A13.switch@d(DEPT,A14:DEPT)

@d选项与@i相反,只保留找不到的记录

16

=A15.fetch()

17

=demo.cursor("SELECT EMPLOYEE.EID,EMPLOYEE.DEPT,EMPLOYEE.NAME,EMPLOYEE.SALARY FROM EMPLOYEE  where EID<11")

A5

18

=demo.query("SELECT * FROM DEPARTMENT where MANAGER<5")

A6

19

=A17.switch@1(DEPT,A18:DEPT)

使用@1选项,A17的某些DEPT值在A18中找不到,此时生成一条A18结构的记录,主键值设为DEPT

20

=A19.fetch()

相关概念:

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

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

返回值:

原游标cs

示例:

 

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的字段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

 

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)

把虚表中DEPT字段值转成序表A3中的指引字段,返回虚表内容如下:

5

=A2.switch@i(DEPT,A3)

使用@i选项,删除掉匹配不上的记录

6

=A2.switch@d(DEPT,A3)

使用@d选项,虚表中只保留匹配不上的记录

7

=A2.switch@1(DEPT,A3)

使用@1选项,虚表中的DEPT值在序表A3中找不到时,生成一条A3结构的记录,主键值设为DEPT