mysql 行列转置

【问题】

 原sql如下:select day,registerCount,loginCount

from(

    select day from date where day between 20120101 and 20120103)tmp

left join(

    select registerCount from register)r on tmp.day=r.day

left join(

    select loginCount from login)l on tmp.day=l.day

group by day;

  原结果集如下:

undefined

想更改为如下结果:

undefined

水平有限,请高手搭救,要详细sql

【回答】

       数据转置的问题,用Oracle的pivot关键字实现起来比较方便,但Mysql等其他数据库没有提供,硬拼的写法不容易理解和维护,也难以实现动态列的效果。可以采用集算器来做,SPL脚本如下:

A
1$select day,registerCount,loginCount from…
2=A1.pivot@r(day;类别,count)
3=A2.pivot(类别;day,count)

A1:问题里的原sql

A2:对A1列转行,将registerCount,loginCount转换为类别列的字段值,结果如下:

undefined

A3:对A2行转列,将day字段值的唯一值转换为列名

undefined

写好的脚本,可以通过集算器JDBC与其他应用集成,可参考Java 如何调用 SPL 脚本


版权声明:本文为raqsoft原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。