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

 

【回答】

       数据转置的问题,用Oraclepivot关键字实现起来比较方便,但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 脚本