q 中 exec 的函数形式
functional form of exec in q
考虑流动的例子:
q)\l sp.q
q)exec (qty;s) from sp
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1
我想以函数形式编写它,对我来说最明显的方法是:
q)?[sp;();();(`qty;`s)]
300 300 300 300 200 300 200 200 400 200 200 200
但它不能给我正确的结果。结果对我来说不直观,为什么这个表格不行?
我必须做的:
q)value ?[sp;();();`qty`s!`qty`s]
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s4
wiki 仅说明多列需要字典,据我所知没有说明原因。要查看 q 如何解释您的查询,您可以使用 parse
。对于您在上面给出的查询:
q)parse"exec (qty;s) from sp"
?
`sp
()
()
,(enlist;`qty;`s)
这里我们可以看出它并不像传递列名列表那么简单。
如果您想直接传递列名,您可以 "exec" 这样:
q)sp`qty`s
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1
请注意,这仅适用于内存中未加密的 tables(无分区)。如果 table 是键控的,你可以 运行 (0!sp)`qty`s
其中 0!
是无列键控的快捷方式。
正如 Thomas 指出的那样 - 您应该解析 exec 语句并以函数形式重新创建其输出,这将是
q)?[sp;();();enlist,`qty`s]
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1
考虑流动的例子:
q)\l sp.q
q)exec (qty;s) from sp
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1
我想以函数形式编写它,对我来说最明显的方法是:
q)?[sp;();();(`qty;`s)]
300 300 300 300 200 300 200 200 400 200 200 200
但它不能给我正确的结果。结果对我来说不直观,为什么这个表格不行?
我必须做的:
q)value ?[sp;();();`qty`s!`qty`s]
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s4
wiki 仅说明多列需要字典,据我所知没有说明原因。要查看 q 如何解释您的查询,您可以使用 parse
。对于您在上面给出的查询:
q)parse"exec (qty;s) from sp"
?
`sp
()
()
,(enlist;`qty;`s)
这里我们可以看出它并不像传递列名列表那么简单。
如果您想直接传递列名,您可以 "exec" 这样:
q)sp`qty`s
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1
请注意,这仅适用于内存中未加密的 tables(无分区)。如果 table 是键控的,你可以 运行 (0!sp)`qty`s
其中 0!
是无列键控的快捷方式。
正如 Thomas 指出的那样 - 您应该解析 exec 语句并以函数形式重新创建其输出,这将是
q)?[sp;();();enlist,`qty`s]
300 200 400 200 100 100 300 400 200 200 300 400
s1 s1 s1 s1 s4 s1 s2 s2 s3 s4 s4 s1