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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值