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

KDB/Q:根据列的值添加两个表,kdb,Kdb,我有两个具有相同列的表。但是,一个表包含买入数据,而另一个表包含卖出数据。表的第一列是ID,表的行数可能不同。 如果ID的值相同,如何添加两个表中列的值?例如,我想添加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 16

我有两个具有相同列的表。但是,一个表包含买入数据,而另一个表包含卖出数据。表的第一列是ID,表的行数可能不同。 如果ID的值相同,如何添加两个表中列的值?例如,我想添加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

您可以使用加号连接来添加用于匹配ID的表,然后对表B中与union连接不匹配的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

您可以使用加号连接添加用于匹配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

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

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

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

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

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

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