代码之家  ›  专栏  ›  技术社区  ›  Utsav

基于变量名q kdb从表中选择列

kdb
  •  0
  • Utsav  · 技术社区  · 7 年前

    我有一个包含sym和px列的表

    t:([] sym:`GOOG`IBM`APPL; px:1000 2000 3000)
    

    现在,如果我把sym列赋给变量ab

    ab:`sym
    

    select ab from t / 'rank
    select `ab from t / 'rank
    

    我需要根据条件将列名保存到变量中,然后对分配给变量的列运行select查询。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Thomas Smyth    7 年前

    有几种方法可以实现这一点。如果表没有键,那么只需使用 # 使用该列名(请注意,左侧参数必须是列表):

    enlist[ab]#t
    sym
    ----
    GOOG
    IBM
    APPL
    

    另一种方法是使用函数形式,例如:

    q)?[t;();0b;enlist[ab]!enlist ab]
    sym
    ----
    GOOG
    IBM
    APPL
    

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

    q)parse"select ab from t"
    ?
    `t
    ()
    0b
    (,`ab)!,`ab
    

    q){?[x;();0b;{x!x}(),y]}[t;ab]
    sym
    ----
    GOOG
    IBM
    APPL
    
    推荐文章