当前位置: 代码迷 >> Sql Server >> 50 分求一条统计存储过程!解决方法
  详细解决方案

50 分求一条统计存储过程!解决方法

热度:287   发布时间:2016-04-27 17:29:14.0
50 分求一条统计存储过程!
|         学生评议35%         |   院系考评50%|   学生处15%     | 总评      
          |-------------------|-----------   |-----------|   ------------|
姓名   |班级   |积分1|   名次   |积分2|名次       |积分3|名次     |积分|名次         |
-----------------------------
xxx     |0613   |85         |     ?         | 100| ?     |98     |       ?       |     ?     |       ?   |
-----------------------------
yyy     |0615   |85         |     ?         |78| ?     |89   |       ?       |     ?     |       ?   |

现有表结构如上:实现效果如上!
说明:该统计实现名次统计   ,总评的积分是(积分1*0.35+积分2*0.50+积分3*0.15)
并统计各分类的名次如(?)里的名次!
可查询出按院系所得名次!
请高手相助!
谢谢!


------解决方案--------------------
create table tb(姓名 varchar(10),班级 varchar(10),积分1 int,名次1 int,积分2 int,名次2 int,积分3 int,名次3 int,积分4 int,名次4 int)
insert into tb values( 'xxx ', '0613 ',85,0,100,0,98,0,0,0)
insert into tb values( 'yyy ', '0615 ',85,0, 78,0,89,0,0,0)
go

select t1.*,t2.积分2,t2.名次2,t3.积分3,t3.名次3,t4.积分4,t4.名次4 from
(select 姓名,班级,积分1,名次1=(SELECT COUNT(积分1) FROM tb WHERE 积分1 > a.积分1) + 1 from tb a) t1,
(select 姓名,班级,积分2,名次2=(SELECT COUNT(积分1) FROM tb WHERE 积分2 > a.积分2) + 1 from tb a) t2,
(select 姓名,班级,积分3,名次3=(SELECT COUNT(积分1) FROM tb WHERE 积分3 > a.积分3) + 1 from tb a) t3,
(select 姓名,班级,积分4=积分1*0.35+积分2*0.5+积分3*0.15,名次4=(SELECT COUNT(积分1*0.35+积分2*0.5+积分3*0.15) FROM tb WHERE 积分1*0.35+积分2*0.5+积分3*0.15 > a.积分1*0.35+a.积分2*0.5+a.积分3*0.15) + 1 from tb a) t4
where t1.姓名=t2.姓名 and t1.班级=t2.班级 and t1.姓名=t3.姓名 and t1.班级=t3.班级 and t1.姓名=t4.姓名 and t1.班级=t4.班级

drop table tb
------解决方案--------------------
CREATE PROCEDURE myprocedure
as

select t1.*,t2.积分2,t2.名次2,t3.积分3,t3.名次3,t4.积分4,t4.名次4 from
(select 姓名,班级,积分1,名次1=(SELECT COUNT(积分1) FROM tb WHERE 积分1 > a.积分1) + 1 from tb a) t1,
(select 姓名,班级,积分2,名次2=(SELECT COUNT(积分1) FROM tb WHERE 积分2 > a.积分2) + 1 from tb a) t2,
(select 姓名,班级,积分3,名次3=(SELECT COUNT(积分1) FROM tb WHERE 积分3 > a.积分3) + 1 from tb a) t3,
(select 姓名,班级,积分4=积分1*0.35+积分2*0.5+积分3*0.15,名次4=(SELECT COUNT(积分1*0.35+积分2*0.5+积分3*0.15) FROM tb WHERE 积分1*0.35+积分2*0.5+积分3*0.15 > a.积分1*0.35+a.积分2*0.5+a.积分3*0.15) + 1 from tb a) t4
where t1.姓名=t2.姓名 and t1.班级=t2.班级 and t1.姓名=t3.姓名 and t1.班级=t3.班级 and t1.姓名=t4.姓名 and t1.班级=t4.班级

go

EXECUTE myprocedure

--注意创建表和插入数据的动作不在存储过程之内.
  相关解决方案