案例说明:
两表特点:表1与表2需要按主键'date'进行合并,此处两表长度不一,有重合,但不存在包含关系
对于这类数据的处理,我们有两种解决办法:
方法一:先对主键进行求并集后,再一一将表1与表2合并到主键表中,完成全表合并
案例实现:
setsysparam(pn_stock(),'SZ000002');
//表1:20201209T起最近5日的收盘价表格
setsysparam(pn_date(),20201209T);
t1:=nday(5,'date',sp_time(),'close',close());
//表2:20201205T起最近7日的收盘价表格
setsysparam(pn_date(),20201205T);
t2:=nday(7,'date',sp_time(),'open',open());
//得到主键表格序列,并为了好看排了个序
t0:=select thisrow as 'date' from t1[:,'date'] union2 t2[:,'date']
order by thisrow end;
//通过左合并,将表1与表2连接进来,天软支持一次进行多表连接
return select [2].*,[3].* ,datetostr([1].['date']) as 'date' from t0
left join t1 with ([1].['date'] on [2].['date'])
left join t2 with ([1].['date'] on [3].['date']) end;
返回结果:
方法二:在合并时,对主键进行判定后选择有值的替代
案例实现:
setsysparam(pn_stock(),'SZ000002');
//表1:20201209T起最近5日的收盘价表格
setsysparam(pn_date(),20201209T);
t1:=nday(5,'date',sp_time(),'close',close());
//表2:20201205T起最近7日的收盘价表格
setsysparam(pn_date(),20201205T);
t2:=nday(7,'date',sp_time(),'open',open());
t:= select [1].*,[2].*,
//若表1的date值为空,则用表2中的值替代,并转成字符串格式输出
datetostr([1].['date']?:[2].['date']) as 'date'
from t1 full join t2 with ([1].['date'] on [2].['date'])
end;
//排序
return select * from t order by ['date'] end;
返回结果与上图结果一致。