首页 > 解决方案 > 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

标签: kdb

解决方案


在这种情况下,您可以使用 pj。要使用 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

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

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

另一种解决方法是:

q)(pj/)(distinct raze enlist[`ID]#/:(tableA;tableB);1!tableA;1!tableB)
ID  Qty
-------
ABC 190
XYZ 100
TOM 160
AL  100
ROB 40

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


推荐阅读