oracle 时间 列转行,Oracle 中的行转列,列转行

# 1. 行转列

原始结构:

NAME COURSE SCORE

-------------------- -------------------- ----------

zhangsan 语文 82

zhangsan 数学 96

lisi 语文 80

lisi 数学 95目标结构:

NAME 语文 数学

-------------------- ---------- ----------

zhangsan 82 96

lisi 80 95# 对应的 sql

create table t1 (name varchar2(10), course varchar2(10), score float);

insert into t1 values('zhangsan', '语文', 82);

insert into t1 values('zhangsan', '数学', 96);

insert into t1 values('lisi', '语文', 80);

insert into t1 values('lisi', '数学', 95);

SQL> select * from t1;

NAME COURSE SCORE

-------------------- -------------------- ----------

zhangsan 语文 82

zhangsan 数学 96

lisi 语文 80

lisi 数学 95

SQL> select

2 name,

3 sum(case course when '语文' then score else 0 end) 语文,

4 sum(case course when '数学' then score else 0 end) 数学

5 from t1

6 group by name;

NAME 语文 数学

-------------------- ---------- ----------

zhangsan 82 96

lisi 80 95

SQL>

# 2. 列转行

原始结构:

NAME CHINESE_SCORE MATH_SCORE

-------------------- ------------- ----------

zhangsan 82 96

lisi 80 95目标结构:

NAME COURSE SCORE

-------------------- ------------ ----------

lisi 数学 95

lisi 语文 80

zhangsan 数学 96

zhangsan 语文 82# 对应的 sql

create table t2(name varchar2(10), chinese_score float, math_score float);

insert into t2 values('zhangsan', 82, 96);

insert into t2 values('lisi', 80, 95);

SQL> select * from t2;

NAME CHINESE_SCORE MATH_SCORE

-------------------- ------------- ----------

zhangsan 82 96

lisi 80 95

SQL> select name, '语文' course, chinese_score score from t2

2 union

3 select name, '数学' course, math_score score from t2;

NAME COURSE SCORE

-------------------- ------------ ----------

lisi 数学 95

lisi 语文 80

zhangsan 数学 96

zhangsan 语文 82

SQL>

# 相关链接

http://www.2cto.com/database/201108/100792.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值