0

次のストアド プロシージャがあります。

@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% のみ)、それ以外の場合は計算された値を返すだけです。ストアド プロシージャによって返される値の絶対上限を設定する関数をまだ見つけていません。

4

2 に答える 2

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
于 2013-10-11T07:01:35.920 に答える
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
于 2016-08-03T16:29:03.307 に答える