TSL语言基础 > SQL基础到TS-SQL > TS-SQL进阶 > TS-SQL和多重嵌套查询

RefsOf访问上级结果集    

  •   RefsOf的定义为:RefsOf(Exp,UpLevel)
     其中Exp是一个任意的计算表达式,UpLevel是上几级,1表示上一级,2表示上两级,依此类推。
     RefsOf的含义是,使用指定的上级结果集计算EXP表达式。可能这样说会很抽象,举几个例子:
    例如:RefsOf(["学号"],1)表示上级结果集的学号字段,假定存在一个函数SQLTest,其定义为
      Function SQLTest();
      begin
       return ["学号"];
      end;

      RefsOf(SQLTest(),1)同样访问的是上级结果集的学号字段。
    在这里,这样重复地说明只是为了告诉读者,在RefsOf中的第一个参数中的计算,无论是直接访问结果集(如访问字段,ThisRow等等),还是间接地访问(例如通过函数),访问的结果集均是指定的上层结果集的内容,够拗口吧。
    之前的例子我们可以修改成如下代码:
      R:=select *,Select ["课程时间"],["缺课"] from D where ["学号"]=RefsOf(["学号"],1) and ["缺课"]="Yes" end as "出勤记录" from B end;


    实例展示:在表t2中增加t1表中对应行业个股涨幅大于行业涨幅的情况
    t1:= array(
    ("证券":"SH600028","行业":"采矿业","涨幅(%)":-1.01),
    ("证券":"SH600030","行业":"金融业","涨幅(%)":0.07),
    ("证券":"SH601166","行业":"金融业","涨幅(%)":-1.6),
    ("证券":"SH601211","行业":"金融业","涨幅(%)":0.29),
    ("证券":"SH601225","行业":"采矿业","涨幅(%)":-0.49),
    ("证券":"SH601658","行业":"金融业","涨幅(%)":-1.62),
    ("证券":"SH601668","行业":"建筑业","涨幅(%)":1.16));
    t2:=array(("行业":"采矿业","行业涨幅(%)":-1.1),
    ("行业":"金融业","行业涨幅(%)":-0.12),
    ("行业":"建筑业","行业涨幅(%)":2.1));
    return select *,
      select * from t1 where ["行业"]=refsof(["行业"],1)
           and ["涨幅(%)"]>=refsof(["行业涨幅(%)"],1) end as "行业成份"
      from t2 end;

    返回结果: