выбрать столбец из таблицы на основе имени переменной в q kdb - PullRequest
0 голосов
/ 13 мая 2019

У меня есть таблица со столбцами 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

У меня есть требование, когда мне нужно сохранить имя столбца в переменной на основе условия, а затем выполнить запрос на выборку для столбца, который назначен переменной.

После «Q для смертных» и «Справочная карточка», но без помощи.

1 Ответ

5 голосов
/ 13 мая 2019

Есть несколько способов добиться этого. Если таблица не имеет ключа, просто используйте # с этим именем столбца (обратите внимание, что левый аргумент должен быть списком):

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
...