简体   繁体   English

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

[英]TSQL Stored Procedure: If Else Statement in Stored Procedure to Return 1 if calculated value greater then 1

I have the following stored procedure: 我有以下存储过程:

@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

However the procedure throws an error. 但是,该过程将引发错误。

The calculated value is meant to be a percentage value. 计算值应为百分比值。 Due to incorrect user input, in rare cases the value can be as high as 250%, thus i want to return 1 (Logically the value can only be 100%), otherwise just return the calculated value. 由于用户输入错误,在极少数情况下,该值可能高达250%,因此我想返回1(逻辑上该值只能为100%),否则仅返回计算出的值。 I have not yet found a function that sets a absolute ceiling for a value returned by a stored procedure. 我尚未找到为存储过程返回的值设置绝对上限的函数。

may this works for you: 可能对您有用:

@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

The problem is you cannot use flow control statement (eg if...else, while...) within select statement. 问题是您不能在select语句中使用流控制语句(例如if ... else,while ...)。 You can use CASE statement instead. 您可以改用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM