oracle实现交叉报表

在企业中,尤其是中国式报表,很常见。 
--交叉报表实例:
将表:
______________________________________
|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函数来实现交叉报表

 

 

你可能感兴趣的:(oracle)