我有一张桌子 -
q)t
a b c
--------
1 10 100
3 20 200
2 30 300
1 40 400
2 50 500
我希望根据a列上的单个“if”条件更新列b和c值。例如 -
t:update b:0 from t where a=1
t:update c:0 from t where a=1
我可以使用矢量条件但不想这样,因为它会为每一行评估条件两次,而且我的表有很多行。
update b:?[a=1;0;b], c:?[a=1;0;c] from t
我有什么办法可以做到这一点,'a = 1'条件每行只评估一次?
编辑:我之前错过了提及我希望'b'和'c'在'else'条件下取一些其他值而不仅仅保留其原始值 -
update b:?[a=1;0;-1], c:?[a=1;0;-1] from t
答案 0 :(得分:1)
update b:0, c:0 from t where a=1
答案 1 :(得分:0)
如果您想在不评估条件两次的情况下使用矢量条件,则可以先评估它,例如。
q)x:t.a=1
q)x
10010b
q)update b:?[x;0;-1],c:?[x;0;-1] from t
a b c
--------
1 0 0
3 -1 -1
2 -1 -1
1 0 0
2 -1 -1
在这里,您评估条件并将结果存储在变量中,然后在向量条件
中使用它或者你可以做两个更新语句,例如
t:update b:0, c:0 from t where a=1
t:update b:-1, c:-1 from t where a<>1
答案 2 :(得分:0)
您可以在更新中创建一个字典,其中包含与a列相关的每个列的关联值。
update b:![1 2 3;-1 0 1]a,c:![1 2 3;-10 0 10]a from t
a b c
--------
1 -1 -10
3 1 10
2 0 0
1 -1 -10
2 0 0