我们有一个表t:
t:([] sym:`GOOG`IBM`APPL; px:10 20 30; size:1000 2000 3000)
Run Code Online (Sandbox Code Playgroud)
现在,我们要根据函数中提供的条件选择在输出中分配一列。
{[m]select sym, px, size, eb:?[`ab=m;`cd;`ef] from t where size>1000}[`ab] / This works fine providing proper value to eb in output(if/else)
Run Code Online (Sandbox Code Playgroud)
但是我的要求是基于(if / else if)将eb的值设置如下,尝试了?,$,但是没有用
{[m]select sym, px, size, eb:?[`ab=m;`cd;`yz=m;`ef] from t where size>1000}[`ab] / It fails with type error
Run Code Online (Sandbox Code Playgroud)
要求(须藤代码):
if (m==ab) { return cd};
else if (m==yz) {return ef};
Run Code Online (Sandbox Code Playgroud)
使用向量条件时,?您需要嵌套条件。在此示例中,两个条件都不匹配将返回null。
q){[m]select sym, px, size, eb:?[`ab=m;`cd;?[`yz=m;`ef;`]] from t where size>1000}[`ab]
sym px size eb
---------------
IBM 20 2000 cd
APPL 30 3000 cd
Run Code Online (Sandbox Code Playgroud)
如果您有很多离散条件,这可能会变得非常笨拙,则可以选择使用字典。
q)dict:`ab`yz!`cd`ef
q){[m]select sym, px, size, eb:dict[m] from t where size>1000}[`ab]
sym px size eb
---------------
IBM 20 2000 cd
APPL 30 3000 cd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |