返回首页

我有此代码,必须依靠学习者通过的总数,计算整体学习者的总数,然后终于Number_Passed / TOTAL_NUMBER * 100

Declare @TotPass int,@TotNum int, @PasRate Decimal(3,0),

        @intFlag INT = 7

WHILE (@intFlag >0 )

BEGIN

set @TotNum=(Select COUNT(ProgressionStatus)

             from LearnerProgression

             where AcademicYear='2010' and EmisCode='500171421'

             group by Grade

 

             )

 

set @TotPass =(Select COUNT(ProgressionStatus)

              from LearnerProgression

              where AcademicYear='2010' and EmisCode='500171421'

              and ProgressionStatus='P'

              group by Grade

             )

 set @PasRate= (convert(decimal,@TotPass)/CONVERT(decimal,@TotNum)*100 )

 select @TotPass,@TotPass,@PasRate as Rate

 set @intFlag=@intFlag-1

 END

我得到这个错误"子查询返回值超过1,这是不允许的,当子查询跟随在=,=,<。,<=,GT,GT; =或子查询用作表达式时,"{ BR}
我需要一个代码来创建一个数组。

回答

评论会员:游客 时间:2012/02/05
米卡Wendelius:首先,实际上有没有这样的概念在SQL语言作为一个数组。SQL是一套基于语言。@TotNum和@TotPass的变量,这样他们就可以举行一次只是一个单一的价值。这是你的错误的原因。如果我理解正确的话,你想:-通过学生总数-学生总数-合格率而这一切必须每级计算。和你到底要返​​回的结果。如果这是正确的,你可以做一个语句。是这样的:{C}这需要一点解释:查询包含3直列意见,基本上选择在FROM子句中定义的报表。所有这些返回的行数:-第一个(等级)得到所有的成绩,存在的,每个只有一次(DISTINCT)-第二个获得通过学习者的数量每级-第三个获得学习者的总数,每个年级简单的定义中使用的品位和选择部分条款行从这些意见中,凡加入外的列返回和合格率的计算:奥姆・普拉卡什・潘特
|最可能的原因是查询返回比一个结果,因为它从出现错误消息。

请检查该查询返回只有一个值。

Select COUNT(ProgressionStatus) from LearnerProgression where AcademicYear='2010' and EmisCode='500171421'

and ProgressionStatus='P' group by Grade

 

Select COUNT(ProgressionStatus) from LearnerProgression where AcademicYear='2010' and EmisCode='500171421'

group by Grade

评论会员:游客 时间:2012/02/05
喜SandraCy,您的查询是正确的,只是做一个变化,从您的查询子句中删除的组,你将得到的结果