常见问题--SQL行列转换

本文介绍如何使用SQL进行表格数据的行列转换。包括从宽表到长表的转换方法,以及从长表转回宽表的逆向操作。通过具体示例展示了实现这些转换所需的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天又碰到行列转换了,记下来,不要在错

测试数据:

create table t_grade (name varchar2(50),chinese_score number,english_score number,math_score number);
insert into t_grade values ('张三',90,81,80);
insert into t_grade values ('李四',85,90,87);
commit;
select * from t_grade;

15720542_201004131826191.jpg

1.把表转换成

张三    数学    80
张三   英语     81
张三   语文    90
李四   数学    87
李四   英语    90
李四   语文   85

的格式

select name,'语文' as subject,chinese_score as result from t_grade union
select name,'英语' as subject,english_score as result from t_grade union
select name,'数学' as subject,math_score as result from t_grade
order by name

15720542_201004131830421.jpg

2.把表数据格式为:

张三    数学    80
张三   英语     81
张三   语文    90
李四   数学    87
李四   英语    90
李四   语文   85   的grade_t表转换成

 张三 90 81 80
 李四 85 90 87  的样子,这是1的反响转换

测试数据:

create table grade_t (name varchar2(50),subject varchar2(50),score number);
insert into grade_t values ('张三','数学',80);
insert into grade_t values ('张三','英语',81);
insert into grade_t values ('张三','语文',90);
insert into grade_t values ('李四','数学',87);
insert into grade_t values ('李四','英语',90);
insert into grade_t values ('李四','语文',85);
commit;

select * from grade_t;

15720542_201004131840191.jpg

转换SQL:

 

select name,
sum(decode(subject,'语文',score)) as chinese_score,
sum(decode(subject,'英语',score)) as english_score,
sum(decode(subject,'数学',score)) as math_score
from grade_t
group by name

15720542_201004131826191.jpg

很简单,也很容易出错,希望不要再错!

 

 

fj.png1.jpg

fj.png2.jpg

fj.png3.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15720542/viewspace-659619/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15720542/viewspace-659619/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值