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