kdb/q为键控表中的不同键更新一列中的多个不同值
我有一张桌子,它是:kdb/q为键控表中的不同键更新一列中的多个不同值,kdb,q-lang,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:([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;
我将尝试使用下一个查询。但请注意,如果您的
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]
像t[chgkey]`beta:chgvalue这样的东西会很好
有效的解决方案只是稍微复杂一点:
t[([]alpha:chgkey);`beta]:chgvalue
是的,字典解决方案很好。也可以只使用fill而不是检查键:更新beta:beta^dict alpha,从tThanks获得了很多Terrylyynch和Dovzhenko,这真的很有帮助。