虚表

阅读(77) 标签: 虚表, pseudo,

使用实表,还可以生成虚表来执行一些计算,如:

 

A

1

=file("D:/file/dw/employees.ctx")

2

=A1.open()

3

=A2.pseudo()

4

=A3.select(right(Name,6)=="Garcia")

5

=A4.import()

6

=A3.groups(Gender;count(~):Count)

A2中,打开组表employees.ctx中的基表。在A3中,使用函数T.pseudo()从实表生成虚表。在A4中先用T.select(w)在虚表中筛选出满足条件w的数据,和游标类似,此时T.select(w)在虚表中是延迟计算的函数。执行筛选后的虚表,可以用T.import()函数读取数据生成序表。在执行后,A5中得到结果如下:

而除延迟计算之外,也可以用T.groups()这样的立即计算函数立即执行汇总计算获得数据。A6中结果如下:

和游标类似,虚表中执行的延迟计算会影响虚表本身,所以A6中实际统计的是姓为Garcia的员工数据。

 

生成虚表时,可以只使用实表中的部分字段,如:

 

A

1

=file("D:/file/dw/employees.ctx")

2

=A1.open()

3

=A2.pseudo()

4

>A3.select(right(Name,6)=="Garcia")

5

=A3.cursor(EID, Name).fetch@x(100)

和实表类似,从虚表中读取数据也可以生成游标后取数,在A5中取出前100位男员工数据后关闭游标。生成虚表时不能选择字段,但是在生成游标或者用import取数时,可以选择需要的字段。如果需要从虚表中筛选数据,不能类似实表直接在生成游标或者用import取数时添加条件,而需要类似A4中提前处理。执行后A5中取得结果如下:

根据虚表,可以用T.new(T')函数从实表T中筛选数据,获取主键与虚表T'相同的数据,如:

 

A

1

=file("D:/file/dw/employees.ctx")

2

=A1.open()

3

=A2.pseudo()

4

>A3.select(right(Name,6)=="Garcia")

5

=A2.attach(stable)

6

=A5.new(A3)

7

=A6.cursor(EID,Name,OCount,OAmount).fetch(100)

和上面例子类似,A3中生成员工数据的虚表,并在A4中筛选中姓为Garcia的员工。在A5中获得销售员附表,并在A6中使用前面得到的虚表来筛选数据。A7中结果如下:

在虚表数据中,并非所有员工都是销售部员工,在A7中只获取到了附表数据中主键与虚表相同的,也就是销售部员工中姓为Garcia的。使用T.new(T')函数时,如果T'是虚表,获得的结果也是虚表。

 

类似游标,虚表也可使用joinx()函数执行连接计算,如:

 

 

 

 

A

B

1

=file("D:/file/dw/employees.ctx")

=file("D:/file/dw/orders.ctx")

2

=A1.open()

=B1.open()

3

=A2.attach(stable).pseudo()

=B2.attach(otable)

4

=A2.pseudo()

=B3.pseudo()

5

=joinx(A4:s,EID;B4:o,EID)

=A5.cursor().fetch()

A5中将两个虚表中的数据执行连接,B5中结果如下:

使用虚表作为参数使用joinx()函数时,各个参数都需为虚表,而返回的结果也是虚表。