mysql 行列转置

博客内容涉及SQL查询操作,原始SQL旨在选取特定日期范围内的注册和登录计数,并通过LEFT JOIN进行数据聚合。然而,需求变为将结果集进行行列转换。由于MySQL不支持Oracle的PIVOT关键字,解决方案建议使用集算器SPL,它提供了更简洁的转置方法。SPL脚本通过两步操作实现了所需的结果,首先列转行,然后行转列,使得数据格式符合新的需求。
摘要由CSDN通过智能技术生成

【问题】

 原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 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值