8.9 主子表关联的动态行转列
动态行转列,子表动态插入主表。
根据订单表和订单明细表,查询出每个客户每日购买产品的汇总表。
订单表和订单明细表是主子表关系,每个订单有多条明细数据。如下图:
订单明细表中每个订单的明细数据是不定条数的。想要查询出如下表格:
ID | Customer | Date | Product1 | Amount1 | Product2 | Amount2 | Product3 | Amount3 |
---|---|---|---|---|---|---|---|---|
1 | 3 | 20190101 | Apple | 5 | Milk | 3 | Salt | 1 |
2 | 5 | 20190102 | Beef | 2 | Pork | 4 | ||
3 | 2 | 20190102 | Pizza | 3 |
脚本:
A | |
---|---|
1 | =connect(“db”) .query@x(“select * from OrderDetail left join Order on Order.ID=OrderDetail.OrderID”) |
2 | =A1.group(ID) |
3 | =A2.max(~.count()).(“Product”+string(~)+“,”+“Amount”+string(~)).concat@c() |
4 | =create(ID,Customer,Date,${A3}) |
5 | >A2.run(A4.record([ID,Customer,Date]| ~.([Product,Amount]).conj())) |
A1 将订单表和订单明细表进行连接查询。
A2 按订单 ID 分组。
A3、A4 根据各组成员数最大值,动态产生列名,并创建序表。
A5 循环分组后的成员,将每组的数据动态拼在一起,添加到 A3 创建的序表中。