TSQL存储过程:如果计算值大于1,则存储过程中的If Else语句将返回1
我有以下存储过程:TSQL存储过程:如果计算值大于1,则存储过程中的If Else语句将返回1,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,我有以下存储过程: @Beginn Datetime, @End Datetime as Begin select DATE, IF((((SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime)))) >1) then 1 else (((SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime))) from Rawdata where PartNo>0 and DATE> @Beginn
@Beginn Datetime,
@End Datetime
as
Begin
select DATE,
IF((((SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime)))) >1) then 1 else (((SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime)))
from Rawdata where PartNo>0 and DATE> @Beginn and DATE< @End
Group by DATE
Order by DATE DESC
End
@Beginn Datetime,
@结束日期时间
作为
开始
选择日期,
如果(((SUM(ScheduleTime*(OkParts/100))/SUM(PLannedTime)))>1),那么还有1个((SUM(ScheduleTime*(OkParts/100))/SUM(PLannedTime)))
从零件号>0和日期>开始日期<结束日期的原始数据
按日期分组
按日期说明订购
终点
但是,该过程会抛出一个错误
计算值是一个百分比值。由于用户输入不正确,在极少数情况下,该值可能高达250%,因此我想返回1(逻辑上该值只能为100%),否则只返回计算值。我还没有找到为存储过程返回的值设置绝对上限的函数。这是否适用于您:
@Beginn Datetime,
@End Datetime
as
Begin
select DATE,
case when SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime) >1 then 1
else SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime) end
from Rawdata where PartNo>0 and DATE> @Beginn and DATE< @End
Group by DATE
Order by DATE DESC
End
@Beginn Datetime,
@结束日期时间
作为
开始
选择日期,
当总和(ScheduleTime*(OkParts/100))/SUM(PLannedTime)>1时,则为1
else总和(ScheduleTime*(OkParts/100))/SUM(PLannedTime)结束
从零件号>0和日期>开始日期<结束日期的原始数据
按日期分组
按日期说明订购
终点
问题是您不能在select语句中使用流控制语句(例如if…else,while…),您可以改用CASE语句
Declare @Beginn Datetime
Declare @End Datetime
as
Begin
select DATE,
(case when SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime) >1 then 1
else SUM(ScheduleTime*(OkParts/100))/ SUM(PLannedTime) end) as ALIAS
from Rawdata where PartNo>0 and DATE> @Beginn and DATE< @End
Group by DATE
Order by DATE DESC
End
Declare@Beginn Datetime
声明@End Datetime
作为
开始
选择日期,
(当总和(ScheduleTime*(OkParts/100))/SUM(PLannedTime)>1时,则为1
else SUM(ScheduleTime*(OkParts/100))/SUM(PLannedTime)end)作为别名
从零件号>0和日期>开始日期<结束日期的原始数据
按日期分组
按日期说明订购
终点