搭建数据
create table tb_grade
(
id integer primary key,
user_name varchar2(20),
course varchar2(20),
score integer
);
insert into tb_grade values (1, '张三', '语文', 78);
insert into tb_grade values (2, '张三', '数学', 95);
insert into tb_grade values (3, '张三', '英语', 81);
insert into tb_grade values (4, '李四', '语文', 70);
insert into tb_grade values (5, '李四', '数学', 82);
insert into tb_grade values (6, '李四', '英语', 81);
insert into tb_grade values (7, '王五', '语文', 90);
insert into tb_grade values (8, '王五', '数学', 68);
insert into tb_grade values (9, '王五', '英语', 74);
commit;
然后select
SQL> select * from tb_grade;
ID USER_NAME COURSE SCORE
---------- -------------------- -------------------- ----------
1 张三 语文 78
2 张三 数学 95
3 张三 英语 81
4 李四 语文 70
5 李四 数学 82
6 李四 英语 81
7 王五 语文 90
8 王五 数学 68
9 王五 英语 74
已选择9行。
SQL>
行转列后:
SQL> select t.user_name,
2 sum(decode(t.course, '语文', score, null)) chinese,
3 sum(decode(t.course, '数学', score, null)) math,
4 sum(decode(t.course, '英语', score, null)) english
5 from tb_grade t group by t.user_name order by t.user_name;
USER_NAME CHINESE MATH ENGLISH
-------------------- ---------- ---------- ----------
李四 70 82 81
王五 90 68 74
张三 78 95 81
SQL>
decode函数:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
查看过程
先decode
SQL> select t.user_name,
2 decode(t.course, '语文', score, null) chinese,
3 decode(t.course, '数学', score, null) math,
4 decode(t.course, '英语', score, null) english
5 from tb_grade t;
USER_NAME CHINESE MATH ENGLISH
-------------------- ---------- ---------- ----------
张三 78
张三 95
张三 81
李四 70
李四 82
李四 81
王五 90
王五 68
王五 74
已选择9行。
SQL>
然后sum
SQL> select t.user_name,
2 sum(decode(t.course, '语文', score, null)) chinese,
3 sum(decode(t.course, '数学', score, null)) math,
4 sum(decode(t.course, '英语', score, null)) english
5 from tb_grade t group by t.user_name order by t.user_name;
USER_NAME CHINESE MATH ENGLISH
-------------------- ---------- ---------- ----------
李四 70 82 81
王五 90 68 74
张三 78 95 81
SQL>