oracle中行,列的转换(列求和)

1.有些时候因为业务的需求,需要将平时在数据库中查询的的列,转换为行的形式。
普通查询的结果(select t.* from table t)
一般查询结果

业务需求的结果
我们需要的结果
2,这里我使用的是sum(),decode()函数

select k.id, 
        sum(aaa) as aaa,
        sum(bbb) as bbb, 
        sum(ccc) as ccc
  from (select t.id,
               decode(name, 'aaa', cnum, 0) as aaa,
               decode(name, 'bbb', cnum, 0) as bbb,
               decode(name, 'ccc', cnum, 0) as ccc
          from table t) k
 group by k.id

当然也可以使用case when 来代替decode()函数,我的一篇博客有两者的介绍,有时候用法是可以相互替代的。

3.后来业务又要求,对每一列进行统计求和,因为我们一般找的数据都是行数据,所以对列数据进行求和,大部分人建议多查一次在进行联合表,十分麻烦,后来我发现了一个函数cube(),很强的,直接帮我搞定。(比起上面的代码只在最后有一点变化)

select k.id, 
        sum(aaa) as aaa,
        sum(bbb) as bbb, 
        sum(ccc) as ccc
  from (select t.id,
               decode(name, 'aaa', cnum, 0) as aaa,
               decode(name, 'bbb', cnum, 0) as bbb,
               decode(name, 'ccc', cnum, 0) as ccc
          from yz_for_test t) k
 group by cube(k.id) order by 1

结果如图:
这里写图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值