日期:2014-05-17  浏览次数:20755 次

一个较难的sql
表 学生补课每日分数记录 一个同学只补课一门
 日期 科目 科目排名 姓名 分数
 2012/4/15 语文 1 毛小洋 90
 2012/4/15 数学 1 王朱朱 94
 2012/4/15 英语 1 朱曾鞥 93
 2012/4/15 语文 2 小米 87
 2012/4/15 数学 2 小鱼 86
 2012/4/15 英语 2 小刘 89
 2012/4/15 语文 3 啊毛 81
 2012/4/15 数学 3 啊严 82
 2012/4/15 英语 3 阿里 83

 2012/4/16 语文 1 小米 98
 2012/4/16 数学 1 王朱朱 91
 2012/4/16 英语 1 朱曾鞥 96
 2012/4/16 语文 2 毛小洋 84
 2012/4/16 数学 2 啊严 88
 2012/4/16 英语 2 阿里 86
 2012/4/16 语文 3 啊毛 80
 2012/4/16 数学 3 小鱼 80
 2012/4/16 英语 3 小刘 82

 2102/4/17 .. .. .. ..
 .. .. .. .. ..

我想查出的视图1 日期2012/4/16  
排名 姓名 语文分数 进步分数 排名 姓名 数学分数 进步分数 排名 姓名 英语分数 进步分数
1 小米 98 11 1 王朱朱 91 -3 1 朱曾鞥 96 3
2 毛小洋 84 -6 2 啊严 88 6 2 阿里 86 3
3 啊毛 80 -1 3 小鱼 80 -6 3 小刘 82 -7
.. .. .. .. .. .. .. .. .. .. .. ..
进步分数就=今天的分数-昨天的分数


我想查出的视图2 日期2012/4/16  
排名 姓名 语文分数 进步分数 排名 姓名 数学分数 进步分数 排名 姓名 英语分数 进步分数
1 小米 98 11 1 王朱朱 91 -3 1 朱曾鞥 96 3
2 毛小洋 84 -6 2 啊严 88 6 2 阿里 86 3
3 啊毛 80 -1 3 小鱼 80 -6 3 小刘 82 -7
.. .. .. .. .. .. .. .. .. .. .. ..
  合计: 合计: 合计:

字段排列还是按照上面查询,不同之处是加上合计项





------解决方案--------------------
不想具体回复了,用到几个东西:
1、行列转换
2、group by rollup(...)
3、总计部分需要用grouping,将NULL值转换为总计字样。