oracle 交叉表 月报表,Oracle 用交叉表技术实现统计数据

交叉表的写法,主要用Decode和Case来实现,它们的最大区别就是, case应用广泛一些

如何实现交叉表的功能?通过sql语句?

如: 学号 课程 分数

1 数学 99

1 英语 89

1 法律 98

2 数学 100

2 英语 99

2 法律 87

将上述表变为:

学号 数学 英语 法律 1 99 89 98

2 100 99 87

create table stu(学号 number,课程 varchar2(20),分数 number);

insert into stu values(1,'数学',99);

insert into stu values(1,'英语',68);

insert into stu values(2,'法律',79);

insert into stu values(3,'数学',92);

insert into stu values(3,'英语',72);

insert into stu values(4,'法律',96);

select * from stu;

create table student(

学号 number,

姓名 varchar(20)

);

insert into student values(1,'mqian');

insert into student values(2,'hzy');

select s1.学号,s2.姓名,

sum(case 课程 when '数学' then 分数 end)as 数学,

sum(case 课程 when '英语' then 分数 end)as 英语,

sum(case 课程 when '法律' then 分数 end)as 法律,

sum(分数)总分数 from stu s1

join student s2 on s1.学号 =s2.学号 group by s1.学号,s2.姓名

union all

select null,'总分数',

sum(case 课程 when '数学' then 分数 end)as 数学,

sum(case 课程 when '英语' then 分数 end)as 英语,

sum(case 课程 when '法律' then 分数 end)as 法律,

sum(分数)总分数 from stu s1

join student s2 on s1.学号 =s2.学号 ;

select s_name from student;

select * from student;

select * from stu;

drop table student;

--分页语句 select * from (

select rownum r,a.* from (

select * from emp order by emp.hiredate desc ) a ) b

where r between 4 and 6

--另一题目

2009-05-19 胜

2009-05-19 胜

2009-05-19 负

2009-05-20 胜

2009-05-20 负

2009-05-20 胜

2009-05-20 负

-------------------------

sql查询后输出:

--------------------------

胜 负

2009-05-19 2 1

2009-05-20 2 2

CREATE TABLE test1(t_date DATE,t_flag CHAR(2));

SELECT * FROM test1;

SELECT t_date,

COUNT(CASE t_flag WHEN '胜' THEN t_flag END)AS 胜,

COUNT(CASE t_flag WHEN '负' THEN t_flag END)AS 负

FROM test1 GROUP BY t_date;

COMMIT;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值