根据q kdb中的变量名称从表中选择列

Uts*_*Uts 0 kdb

我有一个带有sym和px列的表

t:([] sym:`GOOG`IBM`APPL; px:1000 2000 3000)
Run Code Online (Sandbox Code Playgroud)

现在,如果我将sym列分配给变量ab

ab:`sym
Run Code Online (Sandbox Code Playgroud)

然后,运行下面的查询给出排名错误

select ab from t / 'rank
select `ab from t / 'rank
Run Code Online (Sandbox Code Playgroud)

我有一个要求,我需要根据条件将列名保存到变量,然后在分配给变量的列上运行select查询。

遵循“真人快打”和“参考卡”,但没有帮助。

Tho*_*yth 5

有两种方法可以实现此目的。如果未对表进行键控,则只需使用#该列名即可(请注意,左手参数必须是列表):

enlist[ab]#t
sym
----
GOOG
IBM
APPL
Run Code Online (Sandbox Code Playgroud)

一种替代方法是使用功能形式,例如:

q)?[t;();0b;enlist[ab]!enlist ab]
sym
----
GOOG
IBM
APPL
Run Code Online (Sandbox Code Playgroud)

您可以从分析树中获取此查询的形式,例如:

q)parse"select ab from t"
?
`t
()
0b
(,`ab)!,`ab
Run Code Online (Sandbox Code Playgroud)

以下是用于功能选择的更通用的功能:

q){?[x;();0b;{x!x}(),y]}[t;ab]
sym
----
GOOG
IBM
APPL
Run Code Online (Sandbox Code Playgroud)