oracle11g实现行转列可以使用的函数(case...when...then,decode,pivot)

1.数据准备

数据表sc4

create table  cs4 (id number,

years number,

months number,

amount number);

insert into cs4 values(1,1991,1,1.1);

insert into cs4 values(2,1991,2,1.2);

insert into cs4 values(3,1991,3,1.3);

insert into cs4 values(4,1991,4,1.4);

insert into cs4 values(5,1992,1,2.1);

insert into cs4 values(6,1992,2,2.2);

insert into cs4 values(7,1992,3,2.3);

insert into cs4 values(8,1992,4,2.4);

查询结果

实际只需要使用第二列、第三列、第四列进行列转行操作,需要使用子查询实现;

2.方法1,使用聚合函数SUM+‘case ... when ...then’实现

select years,
       SUM(CASE WHEN MONTHS = '1' THEN AMOUNT ELSE 0 END ) M1,
       SUM(CASE WHEN MONTHS = '2' THEN AMOUNT ELSE 0 END) M2,
       SUM(CASE WHEN MONTHS = '3' THEN AMOUNT ELSE 0 END ) M3,
       SUM(CASE WHEN MONTHS = '4' THEN AMOUNT ELSE 0 END ) M4
       FROM CS4 GROUP BY YEARS;

3.方法2,使用聚合函数SUM+'decode'实现

select years,
       sum(decode(months,1,amount,0)) m1,
       sum(decode(months,2,amount,0)) m2,
       sum(decode(months,3,amount,0)) m3,
       sum(decode(months,4,amount,0)) m4 from (select years,months,amount from cs4)
       group by years;

4.使用函数pivot实现

select years,m1,m2,m3,m4

from (select years,months,amount from cs4)

pivot (sum(amount) for months in

('1' m1,

'2' m2,

'3' m3,

'4' m4));

5.函数简介

5.1.case...when...then...

case...when...then...是常用的条件判断

5.2.decode

decode,是条件判断

decode(<列名>,<条件1>,<结果1>,<条件2>,<结果2>...<默认值>)

当某一列参数值与条件对比,

若条件1成立返回结果1;

若不成立,则与条件2比较成立的话返回结果2;

若所有条件都不成立,则返回默认值;

若所有条件都不成立,也没有设置默认值,则返回null

5.3.pivot

oracle内置的行转列函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值