KDB从嵌套表格列表提取deskID并关联对应deskName的实现方法
实现方案
你可以直接用q语言内置的ungroup函数实现,代码非常简洁:
// 输入你的原始表t t:flip (`tabList`deskName)!((flip (`deskID`bType`ext)!(enlist 653j;enlist `ALL;enlist `30);flip (`deskID`bType`ext)!(592j, 594j, 601j, 603j;`ALL`ALL`ALL`ALL;`40`50`60`70));(`D1;`D2)) // 执行转换即可得到目标结果 res: ungroup select deskID: deskID each tabList, deskName from t
执行后res的结构就和你给出的期望结果完全一致。
如果想要更直观的手动实现逻辑,也可以用逐行遍历的写法:
res: raze {flip (`deskID`deskName)!(x`deskID; count[x`deskID]#y)}'[t`tabList; t`deskName]
逻辑说明
ungroup写法的核心逻辑是:先从每行的嵌套子表中提取deskID列表,再把列表类型的deskID列拆分为多行,拆分时自动保留对应行的deskName值,一步完成拼接。- 逐行遍历的写法逻辑更易懂:配对遍历每一行的嵌套子表和对应的
deskName,为每个子表的deskID生成对应数量的重复deskName,最后把所有子结果合并成一张总表。
内容的提问来源于stack exchange,提问作者pmade1
相关产品推荐
相关产品推荐

