怎么实现不聚合的 pivot?

关键词导读:不聚合 pivot

较新版本的主流数据库提供了 pivot 函数,能较方便的处理一些静态行列置换查询,但因为它和聚合操作捆绑在一起,会导致一些理解困扰,看下面这个例子:

1png

想转置成:

2png

这是个不需要聚合的单纯转置操作,但在用 SQL 里的 pivot 时,不得不用 max/min 聚合一下,虽然动作不大,但确实给新手造成了理解困难。如果对 pivot、unpivot 理解不深,经常会误认它们是互逆操作。实际并不是,因为绑定的聚合是不可逆的(明细数据能 sum,但 sum 的和计算不出明细数据)。

 

如果使用提倡分步计算的 SPL 语言,就不会有这样的理解误区,SPL 里的 pivot 就设计成了纯粹的转置动作,写起来和理解起来都简单:

=connect(”mysqlDB”).query(“select * from t”).pivot(CustomerID; DBColumnName, Data)

除了数据结构明确的静态转置,还有数据结构未知的动态转置、转置过程中需要列间计算、双向转置等更多复杂的转置需求,都是 SQL 很头疼,但 SPL 擅长的,可以参考《转置》了解。

 

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

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

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


以下是广告时间

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



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