我有以下存储过程:
@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%),否则只返回计算值。我还没有找到一个函数来设置存储过程返回的值的绝对上限。
答案 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