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函数来实现交叉报表

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值