TSQL存储过程:如果存储过程中的Else语句返回1,则计算值大于1

时间:2013-10-11 05:53:50

标签: 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 and DATE< @End 
Group by DATE
Order by DATE DESC
End

然而,该过程会引发错误。

计算出的值是百分比值。由于用户输入不正确,在极少数情况下,该值可能高达250%,因此我想返回1(逻辑上该值只能是100%),否则只返回计算值。我还没有找到一个函数来设置存储过程返回的值的绝对上限。

2 个答案:

答案 0 :(得分:0)

这可能适合你:

@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

答案 1 :(得分: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