问题描述
更熟悉sql语句-具有此列表VENUE。该列包含诸如NYSE,NASDAQ,CBOE等字符串。我想创建一个新列,并根据VENUE值对其进行定义。
因此在sql中,我会声明-
select VENUE,Case when VENUE = 'NYSE' then 'Primary'
when VENUE <> 'NYSE then 'NotPrimary'
else VENUE end as VenueType
from data
我如何在kdb中实现这一目标?任何指导都将不胜感激。
解决方法
我对SQL语法不熟悉,但是看起来您应该可以像这样使用vector conditional operator:
q)show t:([]VENUE:`NYSE`NYSE`ASX`NZX`TKO)
VENUE
-----
NYSE
NYSE
ASX
NZX
TKO
q)update VENUETYPE:?[`NYSE=VENUE;`Primary;`NotPrimary] from t
VENUE VENUETYPE
----------------
NYSE Primary
NYSE Primary
ASX NotPrimary
NZX NotPrimary
TKO NotPrimary
,
正如Michael指出的那样,向量条件只有当结果值(主要/非主要)较少时才起作用。在更常见的情况下,可能会有许多结果值,那么最好使用字典重新映射值。
d:`NYSE`ASX`NZX`TKO!`case1`case2`case2`case3;
q)update VenueType:d[VENUE] from t
VENUE VenueType
---------------
NYSE case1
NYSE case1
ASX case2
NZX case2
TKO case3
您可以将未映射的查询留空
q)d:`NYSE`ASX!2#`primary
q)update VenueType:d[VENUE] from t
VENUE VenueType
---------------
NYSE primary
NYSE primary
ASX primary
NZX
TKO
或使用默认值填充
q)update VenueType:`notPrimary^d[VENUE] from t
VENUE VenueType
----------------
NYSE primary
NYSE primary
ASX primary
NZX notPrimary
TKO notPrimary