2013-10-11 2 views
0

У меня есть следующая хранимая процедура:TSQL хранимой процедуры: Если другое заявление в хранимой процедуре возвращать 1, если расчетное значение больше чем 1

@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

Сменить IF на CASE –

ответ

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 
0

Проблема заключается в том, вы не можете использовать заявление управления потоком (например, если ... еще, в то время как ...) в пределах оператора выбора. Вместо этого вы можете использовать оператор 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 
Смежные вопросы