pivot 搞不定的动态行列转置怎么办?


关键词导读:pivot 动态 行列转置

Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如:

1png

想转置成:

2png

这个难点在于事先不知道有多少种收入来源,而且每个人的收入来源种类各不相同。先得计算出种类个数,根据个数动态生成表结构,然后按照顺序填充每个人的多个收入数据。

SQL 的计算过程不提倡分步,对集合操作支持的也不彻底,很难应付这种多步骤复杂计算。

如果用集算器的 SPL 语言来处理,就能轻松实现:


A

B

1

=connect("db")

=A1.query("select * from Income")

2

=B1.group(Name) =A2.max(~.len())

3

=create(Name,${B2.("Source"+string(~)+",Income"+string(~)).concat@c()})


4

for A2 =A4.Name|A4.conj([Source,Income])

5


>A3.record(B4)

A3 格子根据原始数据得到期望数据结构的空表;B4 格子得到每个人要填充入空表的数据。

除了动态行列转置,还有双向转置、转置同时存在列间运算等复杂转置需求,这些计算用 SPL 都容易编写出来,参考《转置》

 

当数据不在数据库里时,SPL 执行复杂计算仍然方便:
=file(“d:/t.csv”).import(;,",").pivot...

SPL能很方便地嵌入到JAVA应用,可参考《Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》


以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾