switch()

阅读(3012) 标签: switch,

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

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

描述:

将编码字段的键值切换为指引记录。

语法:

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

备注:

P中外键字段Fi的值切换为Ai的记录匹配条件为FiAix字段值相等,匹配不到的填为null返回切换后的序表。

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

外键有索引表则用索引,没有则建立索引。

参数:

P

序表/排列。

Fi

P的外键字段。

Ai

序表/排列。

x

Ai中与Fi匹配的字段,缺省为Ai的主键。x#时直接用序号定位,Ai有序号索引时,可省略#

选项:

@i

Fi值匹配不到时删除整条记录。

@d

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

@1

PFi值在Ai中找不到,则在Fi中生成一条Ai结构的记录,主键值设为Fi

返回值:

序表

示例:

 

A

 

1

=demo.query("select top 5 * from DEPARTMENT")

返回序表:

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表:

3

=A2.switch(DEPT,A1:DEPT)

A2表的外键DEPTA1表中的DEPT字段匹配,将键值切换为A1表的指引记录,匹配不到的填入null

  参数x省略:

 

A

 

1

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

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

x参数省略,将A2表的外键DEPTA1表主键匹配,将键值切换为A1表的指引记录:

x用序号定位,Ai中有序号索引时:

 

A

 

1

=connect("demo").query("SELECT * FROM CITIES")

返回序表:

2

=connect("demo").query("SELECT * FROM STATECAPITAL")

返回序表:

 

3

=A2.index@n()

A2表建立序号索引。

4

=A1.switch(STATEID,A2)

A1中的CITIES表作为事实表,A3中的STATECAPITAL作为维表;

通过switch()函数执行表关联计算,将CITIES表中的STATEID键值切换为STATECAPITAL的指引记录,计算过程中会使用外键的索引表,此时表达式中可以省略序号键,等同于A1.switch(STATEID,A2:#)

返回结果如下:

  使用@i选项:

 

A

 

1

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

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@i选项,A2DEPT匹配不到时删除整条记录:

  使用@d选项:

 

A

 

1

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

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@d选项,只返回A2DEPT匹配不到记录:

  使用@1选项:

 

A

 

1

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

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@1选项,匹配不到时则在DEPT中生成一条A1结构的记录,记录的主键值为DEPT

 

相关概念:

cs.switch()

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

描述:

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

语法:

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

备注:

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

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

该函数属于附加计算动作

参数:

ch

管道。

Fi

ch中的字段

Ai

序表/排列。

x

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

选项:

@i

Fi值匹配不到时删除整条记录。

@d

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

@1

ch中某条记录的Fi值在Ai中找不到,则生成一条Ai结构的记录,主键值设为Fi。注意是数字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可匹配的记录时显示为null

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

参数:

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,T’:x;…)

描述:

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

语法:

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

备注:

虚表T中定义计算,将T的字段Fi的值切换为序表/内存虚表T’的记录,返回新虚表。

xT’的主键,匹配条件为Fi等于x;默认情况下,Fi找不到T’可匹配的记录时显示为null

该函数仅适用于企业版。

参数:

T

虚表。

Fi

T中的字段。

T’

序表/内存虚表。

x

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

选项:

@i

Fi值匹配不到时删除整条记录。

@d

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

@1

T中某条记录的F值在T’中找不到,则生成一条T’结构的记录,主键值设为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执行计算后返回结果如下:

8

=pseudo([{file:"dmp.btx",key:"keys(DEPT)"}])

 

使用集文件定义内存虚表,DEPT为主键,数据内容如下:

9

=A2.switch(DEPT,A8)

  =A9.import()

返回结果同B4