Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL存储过程:如果计算值大于1,则存储过程中的If Else语句将返回1_Sql_Tsql_Sql Server 2008 R2 - Fatal编程技术网

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和日期>开始日期<结束日期的原始数据
按日期分组
按日期说明订购
终点