在KDB表中创建嵌套列

时间:2019-06-06 00:49:35

标签: kdb

我想为我的表的其中一列创建一个嵌套列表,但是我不确定要使用的语法。例如,如果我有下表...

q)t:([]submitter:`A`B`C; code:3?100; status:110b)
q)t
submitter code status
---------------------
A         2    1
B         39   1
C         64   0

我想做类似下面的事情。但是,这会将额外的列x添加到表中并将值放在此处,而不是为code列创建复合列表。...

q)update code,:77 from t where status<>1b
submitter code status x
------------------------
A         2    1
B         39   1
C         64   0      77

如果它是一个具有单个值的字典,我将执行以下操作...

q)d:`sumbitter`code`status!(`A;1?100;1)
q)d
sumbitter| `A
code     | ,88
status   | 1

q)d[`code],:99
q)d
sumbitter| `A
code     | 88 99
status   | 1

如何在具有多行的表上执行相同的操作?

我想要的输出看起来像...

q)t
submitter code  status
----------------------
A         2     1
B         39    1
C         64 77 0

2 个答案:

答案 0 :(得分:2)

这也将为您做到,不需要您预先更改类型

q)update code:(code,'(77;())status) from t
submitter code status
---------------------
A         ,12  1
B         ,10  1
C         1 77 0

答案 1 :(得分:1)

您无法像您打算的那样即时更改code列的列类型。

相反,您首先必须将列code的类型更新为long而不是long的列表:

q)meta t
c        | t f a
---------| -----
submitter| s    
code     | j    
status   | b    

更新类型:

t: update enlist each code from t

现在code的类型为"J",它的确是long的列表:

q)meta t
c        | t f a
---------| -----
submitter| s    
code     | J    
status   | b    

然后您可以像这样将元素添加到code

t:update code:{x,77} each code from t where status<>1b

q)t
submitter code  status
----------------------
A         ,2    1     
B         ,39   1     
C         64 77 0