ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 常见问题--SQL行列转换

常见问题--SQL行列转换

原创 Linux操作系统 作者:oracle_db 时间:2010-04-13 18:23:08 0 删除 编辑

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

测试数据:

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;

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

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;

转换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

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

 

 

1.jpg

2.jpg

3.jpg

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

请登录后发表评论 登录
全部评论

注册时间:2008-11-13

  • 博文量
    158
  • 访问量
    354230