kdb + / q Сводная таблица, чтобы превратить несколько столбцов в один столбец? - PullRequest
0 голосов
/ 14 ноября 2018

С учетом следующей таблицы:

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 голосов
/ 14 ноября 2018

Использование flip:

q)ungroup select date , acct, sec , qty: flip (qtya;qtyb;qtyc) from t
0 голосов
/ 14 ноября 2018

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