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 将记录插入结果序表中。