行列互换向并纵横向汇总
【问题】
部门 类别
生产部 台式机
研发部 笔记本
管理部 台式机
生产部 台式机
研发部 笔记本
管理部 台式机
想得到如下结果:
部门 台式机 笔记本 部门合计
生产部 2 0 2
研发部 0 2 2
管理部 2 0 2
总计 4 2 6
【回答】
这里的动态行列转换,如果是为了前端展现,用润乾报表很容易办到,做一个交叉报表即可,横向和纵向的汇总也可以在报表端去实现。如果是要整理成这样一个结果集,提供给其他应用程序,我们看SPL是如何做的:
A |
|
1 |
$select 部门,类别,count(1) as 计数 from tb group by 部门, 类别 |
2 |
=A1.pivot(部门;类别,计数) |
3 |
= A2.run(~.record(~.array().(if(~,~,0)))) |
4 |
=A3.derive(~.array().to(2:).sum():部门合计) |
5 |
=A4.record("合计"|(A4.fno()-1).(A4.field(~+1).sum())) |
A1:通过sql按照部门,类别分组统计设备台数
A2:对A1行转列,组成由部门、台式机、笔记本组成的新序表
A3:将计数为null的字段值修改为0
A4:给A3增加部门合计列
A5:对A4添加合计行,结果如下: