8.8 行转列,同时列间计算
在行转列的同时执行列间计算。
根据用户支付数据明细表,统计各个用户 2014 年每月应付金额的汇总表。
| ID | customID | name | amount_payable | due_date | amount_paid | pay_date |
|---|---|---|---|---|---|---|
| 112101 | C013 | CA | 12800 | 2014/02/21 | 12800 | 2014/12/19 |
| 112102 | C013 | CA | 3500 | 2014/06/15 | 3500 | 2014/12/15 |
| 112103 | C013 | CA | 2600 | 2015/03/21 |
要求根据指定年份(如 2014),输出每月应付金额,若无当月数据,则当月应付金额为上月该值。
| name | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CA | 12800 | 12800 | 12800 | 12800 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | 16300 | |
| … | … | … | … | … | … | … | … | … | … | … | … | … |
先产生空结果集后追加数据,这里要追加的数据需要经常一系列计算才能得到。
脚本:
| A | B | |
|---|---|---|
| 1 | =T(“Payment.txt”).select(year(due_date)==2014) | |
| 2 | =create(name,${12.().concat@c()}) | =A1.group(customID) |
| 3 | for B2 | =12.(null) |
| 4 | >A3.run(B3(month(due_date))= amount_payable) | |
| 5 | >B3.run(~+=~[-1]) | |
| 6 | =A2.record(B2.name|B3) | |
A1:从文件中导入 2014 年数据。
A2:生成包含 12 个月的空序表。
A3:按 customID 分组。
A3~B6:循环分组,B4 设置相应月份的应付金额。
B5 将空值置为前一个月的数值,新增应付款项时累加。
B6 将记录插入结果序表中。
