kdb / q为键控表中的不同键更新一列中的多个不同值

时间:2016-09-01 22:35:32

标签: kdb q-lang

我有一张桌子,是:

t:([alpha:`a`b`c`d`e`f];beta:10 20 30 40 50 60)

我还有两个变量:

chgkey:`b`c
chgvalue:2000 -1000

我想做类似的事情:

t:update beta:2000 from t where alpha=`b;
t:update beta:-1000 from t where alpha=`c;

我的问题是如何组合这两行代码。因为我正在处理一个远远大于这个简单示例的表,并且需要很多行代码才能完成所有更新,这太长了。

这样的好事
t[chgkey]`beta:chgvalue;

2 个答案:

答案 0 :(得分:3)

  

这就像t [chgkey]`beta:chgvalue

一样

工作解决方案稍微复杂一点:

t[([]alpha:chgkey);`beta]:chgvalue

答案 1 :(得分:2)

我会尝试使用下一个查询。但请注意,如果您的dict非常庞大,可能会很慢

dict: `b`c ! 1000 2000;
t: update beta: ?[alpha in key dict; dict alpha;beta] from t;

如果表t是全局的,可以使用功能更新进行更新:

{![`t;enlist (=;`alpha;enlist x);0b; enlist[`beta]!enlist y];}'[`b`c; 1000 2000]