我想向kdb表中添加一个新列,它应该通过填充非空值在现有列的基础上添加,如下所示
q)t:([]a:`a`b`c`d`e`f`g`h;b:1 0n 3 4 0n 6 0n 8;c:0n 2 0n 0n 5 0n 7 0n)
q)t
a b c
-----
a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
我想添加一个列d,它将从c或d中获取非null的值,以生成如下所示的表
a b c d
-------
a 1 1
b 2 2
c 3 3
d 4 4
e 5 5
f 6 6
g 7 7
h 8 8
我试着拼接,但结果里面有null:
q)update d:(b,'c)from t
a b c d
----------
a 1 1
b 2 2
c 3 3
d 4 4
e 5 5
f 6 6
g 7 7
h 8 8
发布于 2019-01-23 21:25:55
发布于 2019-01-23 21:45:59
您可以使用^
(fill)运算符。
t:([]a:`a`b`c`d`e`f`g`h;b:1 0n 3 4 0n 6 0n 8;c:0n 2 0n 0n 5 0n 7 0n)
q)update d:b^c from t
a b c d
-------
a 1 1
b 2 2
c 3 3
d 4 4
e 5 5
f 6 6
g 7 7
h 8 8
值得注意的是,如果有一行b
和c
的值不为null值,那么上面的查询将缺省为c
中的值。如果您希望b
中的值为默认值,则切换输入:
q)t:([]a:`a`b`c`d`e`f`g`h;b:1 0n 3 4 0n 6 0n 8;c:0n 2 0n 0n 5 100 7 0n)
q)update d:b^c from t
a b c d
-----------
a 1 1
b 2 2
c 3 3
d 4 4
e 5 5
f 6 100 100
g 7 7
h 8 8
q)update d:c^b from t
a b c d
---------
a 1 1
b 2 2
c 3 3
d 4 4
e 5 5
f 6 100 6
g 7 7
h 8 8
发布于 2019-01-23 21:27:46
您可以使用'or(|)‘运算符。
q)update d:b|c from t
Concat将给出一个列表,其中包含'b‘和'c’列中的项。它不会删除null。“‘or”将比较“b”和“c”的每一对,并返回该对的最大值。由于null小于整数,因此它将为您提供'b‘或'c’列的整数值。
https://stackoverflow.com/questions/54335838
复制相似问题