行列互换向并纵横向汇总

【问题】

部门               类别
生产部         台式机
研发部         笔记本
管理部         台式机
生产部         台式机
研发部         笔记本
管理部        台式机
想得到如下结果:
部门           台式机    笔记本       部门合计
生产部           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添加合计行,结果如下:

undefined