![11.bmp](/images/cnblogs_com/xnxylf/11.bmp)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
CREATE PROCEDURE select_IntegratedMarkContrastByTime
@semester varchar(50),
@grade varchar(50),
@tSubject_id int,
@achievementName varchar(500)
AS
BEGIN
SET NOCOUNT ON
---------------创建临时表-------------------------------------------------------------------
create table #tb
(
tempId int identity(1,1),
年级统考 varchar(50),
平均分 decimal(10,2),
最高平均分班级 varchar(50),
最高平均分 decimal(10,2),
最高平均分年级平均分差值 decimal(10,2),
最低平均分班级 varchar(50),
最低平均分 decimal(10,2),
最低平均分年级平均分差值 decimal(10,2),
最高平均分最低平均分差值 decimal(10,2)
)
declare @next int --定义循环步长变量
set @next=1
-------------------------以下为循环--------------------------------------------
while @next<=dbo.Get_StrArrayLength(@semester,',')
begin
---------------------定义变量@sqlShare,并赋值----------------------------------
declare @sqlShare varchar(8000)
set @sqlShare='select 学年+学期+年级+achievementName as 年级统考,班级,cast(avg(scoreNumber) as decimal(10,2)) as 平均分
from dbo.aAchievementMarkWithTeacherView where (achievementName='''+dbo.Get_StrArrayStrOfIndex(@achievementName,',',@next)
+''' and semester_id='+ dbo.Get_StrArrayStrOfIndex(@semester,',',@next)
+' and grade_id='+ dbo.Get_StrArrayStrOfIndex(@grade,',',@next)
+' and tSubject_id='+cast(@tSubject_id as varchar(50))+')
group by semester_id,grade_id,学年,学期,年级,achievementName,class_id,班级'
---------------------定义变量@sqlstr,并赋值---------------------------------
declare @sqlstr varchar(8000)
set @sqlstr=' insert into #tb select 年级统考,cast(avg(平均分) as decimal(10,2)) as 年级平均,
(select top 1 班级 from ('
+@sqlShare
+') as b where b.平均分=(select max(平均分) from ('
+@sqlShare
+') as a group by 年级统考)) as 最高平均分班级,
max(平均分) as 最高平均分,
max(平均分)-cast(avg(平均分) as decimal(10,2)) as''最高平均分-年级平均分'',
(select top 1 班级 from ('
+@sqlShare
+') as b where b.平均分=(select min(平均分) from ('
+@sqlShare
+') as a group by 年级统考)) as 最低平均分班级,
min(平均分) as 最低平均分,
cast(avg(平均分) as decimal(10,2))-min(平均分) as ''最低平均分-年级平均分'',
max(平均分)-min(平均分) as ''最高平均分-最低平均分''
from ('
+@sqlShare
+') as newTable group by 年级统考'
exec (@sqlstr)
set @next=@next+1
end
-------------结束循环-----------------------------------------------------------------------
select * from #tb--查询临时表中数据
drop table #tb--删除临时表
END
GO