微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

KDB / Q:根据列的值添加两个表

如何解决KDB / Q:根据列的值添加两个表

我有2个具有相同列的表。但是,一个表包含BUY数据,而另一个表包含SELL数据。该表的第一列是ID,并且表的行数可能不同。 如果ID的值相同,如何在2个表中添加列的值?例如,我要添加tableA和tableB,输出为tableC

tableA      tableB
ID  Qty     ID  Qty
ABC 100     ABC 90
XZY 100     TOM 60
TOM 100     ROB 40
AL  100

tableC
ID  Qty
ABC 190
XYZ 100
TOM 160
AL  100
ROB 40

解决方法

在这种情况下,您可以使用pj。要使用pj,必须对表进行键控以使联接起作用,并且返回的结果将包括与键控表匹配的行。请参阅文章底部的链接。

x++

在查询中,您需要包括两个表中的所有行,因此您需要创建一个包含所有ID的机架,并在两个表中应用pj来将它们添加在一起。见下文。

q)tabA:([]ID:`ABC`XYZ`TOM`AL;Qty:100 100 100 100)
q)tabB:([]`ID`ABC`TOM`ROB;Qty:90 60 40 )
q)tabA pj 1!tabB
ID  Qty
-------
ABC 190
XYZ 100
TOM 160
AL  100
q)tabB pj 1!tabA
ID  Qty
-------
ABC 190
TOM 160
ROB 40

另一种解决方法是:

(pj/)((select distinct ID from tabA,select distinct from tabB);`ID xkey tabA;`ID xkey tabB)

https://code.kx.com/q/ref/pj/

,

您可以使用加号联接添加用于匹配ID的表,然后联接表B中与联合联接或简单逗号联接不匹配的ID

q)tableA:([]ID:`ABC`XZY`TOM`AL;Qty:100 100 100 100)
q)tableB:([]ID:`ABC`TOM`ROB;Qty:90 60 40)
q)(tableA pj 1!tableB),select from tableB where not ID in tableA`ID

https://code.kx.com/q/ref/pj/

,

一种替代方法是将表转换为字典并添加它们。字典似乎是这些表的更自然的结构,因为您将它们描述为键值对:

q)dA:`ABC`XZY`TOM`AL!100 100 100 100
q)dB:`ABC`TOM`ROB!90 60 40
q)dA+dB
ABC| 190
XZY| 100
TOM| 160
AL | 100
ROB| 40

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。