8.9 主子表关联的动态行转列

 

动态行转列,子表动态插入主表。
根据订单表和订单明细表,查询出每个客户每日购买产品的汇总表。
订单表和订单明细表是主子表关系,每个订单有多条明细数据。如下图:

imagepng

订单明细表中每个订单的明细数据是不定条数的。想要查询出如下表格:

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 创建的序表中。