SQL里面的while 循环

--WHILE循环
--特点:
--1.没有True/false,要写条件表达式
--2.也可以嵌套
--3.也可以break,continue
--4.没有{},需要使用begin..end

--如果office不及格的人超过半数(考试题出难了),则给每个人增加2分,循环加,直到不及格的人数少于一半。
go
declare @subjectname nvarchar(50)='office' --科目名称
declare @subjectId int =(select SubjectId from Subject where SubjectName=@subjectname) --科目ID
declare @classid int--指定科目所属于的班级ID
set @classid=(select classid from Subject where SubjectName=@subjectname); --查询指定科目所属于的班级ID
declare @totalNum int --总人数
select @totalNum=COUNT(*) from Student where ClassId=@classid--获取需要参数指定科目考试的总人数
declare @unpassNum int --指定科目没有及格的人数
select @unpassNum=(select COUNT(*) from Result where SubjectId=@subjectId and StudentResult<60) --查询没有通过人次
--循环加分
while(@unpassNum>@totalNum/2)
begin
--执行加分操作
update Result set StudentResult+=2 where SubjectId=@subjectId and StudentResult<=98
--再次统计没有通过的人次
select @unpassNum=(select COUNT(*) from Result where SubjectId=@subjectId and StudentResult<60)
end
go
--------------------------------------------------

------------------------------------------------------
go
declare @subjectname nvarchar(50)='office' --科目名称
declare @subjectId int =(select SubjectId from Subject where SubjectName=@subjectname) --科目ID
declare @classid int--指定科目所属于的班级ID
set @classid=(select classid from Subject where SubjectName=@subjectname); --查询指定科目所属于的班级ID
declare @totalNum int --总人数
select @totalNum=COUNT(*) from Student where ClassId=@classid--获取需要参数指定科目考试的总人数
declare @unpassNum int --指定科目没有及格的人数
--select @unpassNum=(select COUNT(*) from Result where SubjectId=@subjectId and StudentResult<60) --查询没有通过人次
--循环加分
while(1=1)
begin
if(@totalNum/2<(select COUNT(*) from Result where SubjectId=@subjectId and StudentResult<60))
--执行加分操作
update Result set StudentResult+=2 where SubjectId=@subjectId and StudentResult<=98
else
break
end

 

转载于:https://www.cnblogs.com/dianshen520/p/4352005.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值