【问题】
原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;
原结果集如下:
想更改为如下结果:
水平有限,请高手搭救,要详细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转换为类别列的字段值,结果如下:
A3:对A2行转列,将day字段值的唯一值转换为列名
写好的脚本,可以通过集算器JDBC与其他应用集成,可参考Java 如何调用 SPL 脚本