天天看点

动态SQL应用(成绩排名)

Code

 -- 年级排名和班级排名

declare @sql varchar(4000),@nclassid int,@nexamid int  select @sql='' select @nclassid=38 select @nexamid=19

select @sql=@sql+'max(case scoursename when '''+scoursename+''' then descore else 0 end) '+scoursename+','

from (select distinct scoursename from t_card_course where id in (select ncourseid from t_card_examcou where nclassid =+@nclassid and nexamid=+@nexamid )) a  

exec('

select nclassid, name  姓名,'+ @sql+ 'sum(descore) 总分

into #temp 

from ( 

 select b.nclassid,b.name,a.descore,c.scoursename from t_card_score a,t_stu b,t_card_course c,t_card_examcou d 

 where a.nstuid=b.id and a.ncouexamid in

 (select id from t_card_examcou where nclassid in (select id from t_card_class where ngradeid =(select ngradeid from t_card_class where id='+@nclassid+' and nschoolid=(select nschoolid from t_card_class where id='+@nclassid+')))  and nexamid='+@nexamid+' ) 

and a.ncouexamid=d.id and d.ncourseid=c.id group by b.nclassid,b.name,a.descore,c.scoursename )as a

 group by name,nclassid 

select *,班级名次=(select count(总分) from #temp where 总分>y.总分 and nclassid=y.nclassid)+1 into #tempclass from #temp y   

select *,年级名次 =(select count(总分) from #tempclass where 总分>x.总分)+1 into #tempok from #tempclass x where nclassid ='+@nclassid+' order by 班级名次

alter table #tempok drop column nclassid

select * from #tempok

')

    本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/588648,如需转载请自行联系原作者