我尝试将两个更新语句组合在一起。这是因为如果我不一起更新,第一个更新语句将影响第二个更新语句,但我不知道如何。
tab:update trade:`$ssr[;"-01";""]each string deal from tab where ((-1#'string trade) like enlist "0") and (-3#'string deal) like "-01"
tab:update trade:`$ssr[;"-01";"SP"]each string deal from tab where ((-1#'string trade) like enlist "1") and (-3#'string deal) like "-01";
如果我没有合并,我的第一个声明可能有1个交易,后来一个更新声明将添加SP,因为有1个。
答案 0 :(得分:0)
t:([] trade:`trade0`trade0`trade1`trade1`trade2; deal:`1_00`2_01`3_00`4_01`5_01)
update newtrade:`$ {$[y>1;x;ssr[x;"_01";("";"_SP")@y]]} ./: flip(string deal;"01"?last each string trade) from t where deal like "*_01"
trade deal newtrade
--------------------
trade0 1_00
trade0 2_01 2
trade1 3_00
trade1 4_01 4_SP
trade2 5_01 5_01
答案 1 :(得分:0)
从亚历山大那里得到榜样:
q) t:([] trade:`trade0`trade0`trade1`trade1`trade2; deal:`$("1-00";"20-01";"3-00";"4-01";"5-01"))
解决方案:
检查交易是否与列表中的元素匹配(* 0; * 1)。
获取匹配元素的索引。
否则使用ssr将字符串替换为适当的值 - > (“”;“SP”)@ a。
q) t2: update trade:{$[2>a:(x like/: ("*0";"*1"))?1b;`$ssr[y;"-01";("";"SP")@a];x]}'[trade;string deal] from t where deal like "*-01"
原件:
q) t:update trade:`$ssr[;"-01";""]each string deal from t where ((-1#'string trade) like enlist "0") and (-3#'string deal) like "-01"
q) t:update trade:`$ssr[;"-01";"SP"]each string deal from t where ((-1#'string trade) like enlist "1") and (-3#'string deal) like "-01";
q) t~ t2 / true