kdb + / q数据透视表将多列转换为单列?

时间:2018-11-14 04:07:18

标签: kdb

给出下表:

date acct sec qtya qtyb qtyc
----------------------------
11   1    xx  10   60   110
22   2    yy  20   70   120
33   3    zz  30   80   130
44   2    xx  40   90   140
55   3    yy  50   100  150

使用以下语句创建:

t:([]date:11 22 33 44 55;acct:1 2 3 2 3;sec:`xx`yy`zz`xx`yy;qtya:10 20 30 40 50;qtyb:60 70 80 90 100;qtyc:110 120 130 140 150)

提供一种返回数据的方法,如下所示:

date acct sec qty
-----------------
11   1    xx  10
11   1    xx  60
11   1    xx  110
22   2    yy  20
22   2    yy  70
22   2    yy  120
33   3    zz  30
33   3    zz  80
33   3    zz  130
44   2    xx  40
44   2    xx  90
44   2    xx  140
55   3    yy  50
55   3    yy  100
55   3    yy  150

可以使用以下语句创建

q)T:([]date:11 11 11 22 22 22 33 33 33 44 44 44 55 55 55;acct:1 1 1 2 2 2 3 3 3 2 2 2 3 3 3;sec:`xx`xx`xx`yy`yy`yy`zz`zz`zz`xx`xx`xx`yy`yy`yy;qty:10 60 110 20 70 120 30 80 130 40 90 140 50 100 150)

2 个答案:

答案 0 :(得分:2)

q)ungroup 3!select date,acct,sec,qty:(qtya,'qtyb,'qtyc) from t

date acct sec qty
-----------------
11   1    xx  10
11   1    xx  60
11   1    xx  110
22   2    yy  20
22   2    yy  70
22   2    yy  120
33   3    zz  30
33   3    zz  80
33   3    zz  130
44   2    xx  40
44   2    xx  90
44   2    xx  140
55   3    yy  50
55   3    yy  100
55   3    yy  150

答案 1 :(得分:2)

使用flip

q)ungroup select date , acct, sec , qty: flip (qtya;qtyb;qtyc) from t