3.7 序列中所有集合成员的合集
在序列的聚合运算中,计算和列。
订单表和订单明细表是主子表关系,每个订单有多条明细数据。如下图:
Order |
---|
ID* |
Customer |
Date |
OrderDetail |
---|
OrderID* |
Number* |
Product |
Amount |
订单明细表中每个订单的明细数据是不定长的。想要查询出如下表格:
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”) |
2 | =A1.query@x(“select * from OrderDetail left join Order on Order.ID=OrderDetail.OrderID”) |
3 | =A2.group(ID) |
4 | =A3.max(~.count()).(“Product”+string(~)+“,”+“Amount”+string(~)).concat@c() |
5 | =create(ID,Customer,Date,${A4}) |
6 | >A3.run(A5.record([ID,Customer,Date]|~.([Product,Amount]).conj())) |
A1 连接数据库
A2 查询订单明细表和订单表,两表按订单 ID 连接
A3 将取出的数据按订单 ID 分组
A4 计算成员数最大值,然后生成数据结构串
A5 根据 A4 确定的数据结构创建序表
A6 循环每组数据,其中使用了 conj 函数计算本组各个产品和数量的和列,最后把生成的数据追加到 A5 创建的序表中。