oracle行转列

行转列

主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的

decode函数

其具体的语法格式如下:

DECODE(input_value,value,result[,value,result…][,default_result]);

其中:

input_value 试图处理的数值。

DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果

value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回 值,可以使用关键字NULL于之对应

result 是一组成序偶的结果值

default_result 未能与任何一序偶匹配成功时,函数返回的默认值

eg:

行转列

CREATE TABLE tb( 姓名 VARCHAR(10),课程 VARCHAR(10),分数 number);

insert into tb VALUES ('张三','语文',74);

insert into tb VALUES ('张三','数学',83);

insert into tb VALUES ('张三','物理',93);

insert into tb VALUES ('李四','语文',74);

insert into tb VALUES ('李四','数学',84);

insert into tb VALUES ('李四','物理',94);

SELECT * FROM tb;

展示如下:

 

select tb.姓名,

sum(decode(tb.课程, '语文', 分数,null)) as CHINESE,

sum(decode(tb.课程, '数学', 分数,null)) as MATH,

sum(decode(tb.课程, '物理', 分数,null)) as Physics

from tB

group by tB.姓名

order by tB.姓名;

如果需要保留表中的某个字段,需要在select语句中写出,然后采用分组函数;

 

CASE...WHEN

---行转列

---case ...when

create table nu (name varchar2(20));

select * from nu for update;

SELECT SUM(A) A, SUM(B) B, SUM(C) C, SUM(D) D, SUM(E) E

FROM

(SELECT

CASE WHEN name = 'a' THEN 1 ELSE 0 END AS A,

CASE WHEN name = 'b' THEN 2 ELSE 0 END AS B,

CASE WHEN name = 'c' THEN 3 ELSE 0 END AS C,

CASE WHEN name = 'd' THEN 4 ELSE 0 END AS D,

CASE WHEN name = 'e' THEN 5 ELSE 0 END AS E

FROM nu

GROUP BY name);

其中如果表中存在多行,则case when 的执行语句then中是列的名字。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值