SQL Server中使用存储过程实现简略的平均分值功能

SQL Server中使用存储过程实现简单的平均分值功能

在抽题的时候很容易碰到这样子的一个情况:50道题共100,也就是每道题2分,若是手动一个一个填不得累死啊。我就碰到这样子的一个问题了。于是就写了这个简单的存储过程来做这个事儿,执行过后大部分题目的分值都搞定了,小部分的手调+小调即OK。

 

简单思路和业务:

1、根据试卷总分和题目总量计算平均分数(整数);

2、获取所有题目的总分;

3、用试卷的总分减去题目的总分,得到的差值追加到最后一道题目中。

 

实现过程如下:

ALTER PROCEDURE avgScore 
	@id int --试卷序号
AS
BEGIN
	
	SET NOCOUNT ON;
	--1、校验试卷序号不能为空
	if(@id is null or @id<=0)
	begin
		raiserror('必须提供试卷信息',16,1);
		return ;
	end

	--2、获取当前试卷的分数
	declare @field6 int;--考试总分
	declare @count int;--当前试卷题目总数
	declare @avg int;--平均数
	declare @sum int;--总分,各个题目的分数之和,可能<=总分
	select @field6=field6 from table88 where field1=@id;
	select @count = count(field1) from table89 where field2=@id;
	if(@field6>0 and @count>0)--两个都有值
	begin
		set @avg = @field6/@count;--获取平均值
		--将分值分不到各个题目当中去
		update table89 set field11=@avg where field2=@id;
		set @sum = @avg*@count;
		set @sum = @field6-@sum;--获取两者之间的差值
		--更新最后一道题目的分数,也就是将所有剩下的分数给最后一道题
		update table89 set field11=isnull(field11,0)+@sum where field1=(select top 1 field1 from table89 where field2=@id order by field1 desc);
	end
END