今天又碰到行列转换了,记下来,不要在错
测试数据:
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
很简单,也很容易出错,希望不要再错!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15720542/viewspace-659619/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15720542/viewspace-659619/