如何横向更新 kdb table

how to update kdb table transversely

我有这两个 tables:

编辑: 更新了我的第一个 table

tab:([]col1:`abc`def`ghe`abc;val_00:`a`b`c`e;val_01:`d`e`f`t;val_02:`g`h`e`g;val_03:`r`t`y`o)
tab2:([]col1:`abc`abc`abc`abc`def`def`def`ghe`ghe`ghe;col2:0 1 2 3 4 5 6 7 8 9;col3:`Ashley`Peter`John`Molly`Apple`Orange`Banana`Robin`Tony`Bob)

这就是我正在寻找的结果:

tabResult:([]col1:`abc`def`ghe`abc;val_00:`Ashley`b`c`Ashley;val_01:`Peter`e`f`Peter;val_02:`John`h`e`John;val_03:`Molly`t`y`Molly)

    col1    val_00  val_01  val_02  val_03
    abc     Ashley  Peter   John    Molly
    def     b       e        h      t
    ghe     c       f        e      y
    abc     Ashley  Peter   John    Molly

我想根据 tab2 更新 tab。如果 tab2 中的 col1=`abc,col2=1,我想将 tab 中的 val_01 更新为 `Peter,如果 tab2 中的 col1 =`abc,col2=2,我想在 tab 等中用 `John 更新 val_02 字段

这是我目前拥有的:

{![tab;enlist(=;`col1;enlist x);0b;(enlist y)!enlist z]} . (`abc;`val_01;)

如果字段是数字并且我使用数字作为最后一个参数,则上面的函数有效。但是,我不确定如何更新符号以及如何将此函数推广到所有 tables.

感谢任何意见。

如果我对您的请求的理解正确,您是在尝试使用符号类型的值更新具有长整型的字段。这将失败并出现 'type 错误,因为列值的类型应该是统一的。您也可以为符号条目创建新列,然后 select 您想要的列。

你的想法是这样的吗?我假设列名由 tab 中的 col2 值决定。另外,您的 tab 输入中似乎有两个 val_01 列,我假设其中之一应该是 val_02.

q)(uj/){![tab;enlist(=;`col1;enlist x);0b;(enlist`$"val_0",string[y],"_sym")!enlist enlist z]}.'flip tab2`col1`col2`col3
col1 val_00 val_01 val_02 val_03 val_01_sym val_02_sym val_03_sym val_04_sym val_05_sym val_06_sym val_07_sym val_08_sym val_09_sym
-----------------------------------------------------------------------------------------------------------------------------------
abc  1      2      2      3      Peter
def  2      2      3      2
ghe  3      3      1      1
abc  1      2      2      3                 John
def  2      2      3      2
ghe  3      3      1      1
abc  1      2      2      3                            Molly
def  2      2      3      2
ghe  3      3      1      1
abc  1      2      2      3
def  2      2      3      2                                       Apple
ghe  3      3      1      1
abc  1      2      2      3
def  2      2      3      2                                                  Orange
ghe  3      3      1      1
abc  1      2      2      3
def  2      2      3      2                                                             Banana
ghe  3      3      1      1
abc  1      2      2      3
def  2      2      3      2
ghe  3      3      1      1                                                                        Robin
abc  1      2      2      3
def  2      2      3      2
ghe  3      3      1      1                                                                                   Tony
abc  1      2      2      3
def  2      2      3      2
ghe  3      3      1      1                                                                                              Bob

编辑:

根据您的意见,我修改了我的解决方案:

q)cols[tab]#{![x;enlist(=;`col1;enlist y`col1);0b;(enlist`$"val_0",string y`col2)!enlist enlist y`col3]}/[tab;tab2]
col1 val_00 val_01 val_02 val_03
--------------------------------
abc  Ashley Peter  John   Molly
def  b      e      h      t
ghe  c      f      e      y
abc  Ashley Peter  John   Molly