在企业中,尤其是中国式报表,很常见。
--交叉报表实例:
将表:
______________________________________
|a_name | a_subject | a_score |
|张三 | 语文 | 80 |
|张三 | 数学 | 70 |
|张三 | 英语 | 60 |
|李四 | 语文 | 90 |
|李四 | 数学 | 30 |
|李四 | 英语 | 100 |
--------------------------------------
转换成:
______________________________________
| \ | 语文 | 数学 | 英语 |
|张三 | 80 | 70 | 60 |
|李四 | 90 | 30 | 100 |
--------------------------------------
--创建表
drop table t_across;
create table t_across(
a_name varchar2(20) not null,
a_subject varchar2(20) not null,
a_score number(3)
);
--插入数据
insert into t_across(a_name,a_subject,a_score)
values('张三','语文',80);
insert into t_across(a_name,a_subject,a_score)
values('张三','数学',70);
insert into t_across(a_name,a_subject,a_score)
values('张三','英语',60);
insert into t_across(a_name,a_subject,a_score)
values('李四','语文',90);
insert into t_across(a_name,a_subject,a_score)
values('李四','数学',30);
insert into t_across(a_name,a_subject,a_score)
values('李四','英语',100);
commit;
--显示数据
select * from t_across;
--显示交叉表的格式
select a_name "学生\成绩",sum(decode(a_subject,'语文',a_score,null)) "语文",
sum(decode(a_subject,'数学',a_score,null)) "数学",
sum(decode(a_subject,'英语',a_score,null)) "英语"
from t_across
group by a_name;
主要是用到decode函数来实现交叉报表