Oracle的 简单行转列

本文介绍了一种使用SQL进行报表重组的方法,通过示例展示了如何利用decode函数和聚合函数Max实现多列数据的时间序列报表重组,适用于彩票销售等场景的数据整理。

应个报表要求做个

时间             双色球,  胜负彩。。。。。

200905     销量       销量

200906     销量       销量

200907     销量       销量

200908     销量       销量

 

一个SQL 语句得到结果是:

f_yearmonth, lot_name,money

200905   双色球    50

200905   胜负彩   100

200906   双色球   60

200906   胜负彩    70

 

 

Select f_yearmonth,
Max(decode(f_lotname,'双色球',f_money,0)) As "双色球",
Max(decode(f_lotname,'福彩3D',f_money,0)) as "福彩3D",
Max(decode(f_lotname,'胜负彩',f_money,0)) as "胜负彩",
Max(decode(f_lotname,'时时彩',f_money,0)) as "时时彩",
Max(decode(f_lotname,'时时乐',f_money,0)) as "时时乐",
 From
 t_tmp_test_A
 Group By f_yearmonth
 Order By f_yearmonth

 

关键语句:

 Max(decode(f_lotname,'双色球',f_money,0)) As "双色球",

 Group By f_yearmonth

 

应为 按时间重组只有一条,并且只有一条数据:  200905   双色球    50 

那么 用MAX取一条数据 就是50

decode 意思说 如果是‘双色球’ 取对应的f_money  并且放在 命名为 "双色球"的 列上。

 

很显然 这列是固定!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值