KDB/Q:如何用0加入和填充null

KDB/Q: how to join and fill null with 0

我要加入 2 tables。如何将 NULL 替换为 0 中的一列 table? 我要加入的代码

newTable: table1 lj xkey `date`sym xkey table2

我知道0^可以帮助你做到这一点,但我不知道如何在这里申请

在更新语句中使用,例如:

q)newTable:([]column1:(1;0Nj;2;0Nj))
q)update 0^column1 from newTable
column1
-------
1
0
2
0

或函数形式:

    q)newTable:([]column1:(1;0Nj;2;0Nj);column2:(1;2;3;0Nj))
    q)parse"update 0^column1 from newTable"
    !
    `newTable
    ()
    0b
    (,`column1)!,(^;0;`column1)
    q)![newTable;();0b;raze{enlist[x]!enlist(^;0;x)}each `column1`column2]
    column1 column2
    ---------------
    1       1
    0       2
    2       3
    0       0

将来我建议您展示您拥有的 2 个表的示例以及您想要的预期结果,因为这有点难以知道,但我认为这可能是您想要的。 首先在您的代码中使用 xkey 两次,因此它会抛出错误。将其更改为:

newTable: table1 lj `date`sym xkey table2

然后,为了使用另一个表中的列更新空值,您可以这样做:

q)tbl:([]date:.z.d;sym:10?`abc`xyz;data:10?8 2 0n)
q)tbl
date       sym data
-------------------
2020.12.10 xyz 8
2020.12.10 abc 8
2020.12.10 abc 8
2020.12.10 abc
2020.12.10 abc
2020.12.10 xyz 2
2020.12.10 abc 2
2020.12.10 xyz
2020.12.10 xyz
2020.12.10 abc 2
q)tbl2:([date:.z.d;sym:`abc`xyz];data2:2?100)
q)tbl2
date       sym| data2
--------------| -----
2020.12.10 abc| 23
2020.12.10 xyz| 46
q)select date,sym,data:data2^data from tbl lj `date`sym xkey tbl2 //Replace null values of data with data2.
date       sym data
-------------------
2020.12.10 xyz 8
2020.12.10 abc 8
2020.12.10 abc 8
2020.12.10 abc 23
2020.12.10 abc 23
2020.12.10 xyz 2
2020.12.10 abc 2
2020.12.10 xyz 46
2020.12.10 xyz 46
2020.12.10 abc 2

所以,