Ну, функция должна выглядеть так, по крайней мере, , если это для SQL Server : то, что у вас есть выше, неверно
ALTER FUNCTION dbo.FN_LTV_Ranges
(
@LTV_RANGE decimal(4,3)
)
Returns varchar(16)
as
Begin
declare @Return varchar(16)
select @Return =
Case
When @LTV_Range is NULL then 'Missing'
When @LTV_Range = 0 then 'Missing'
When @LTV_Range <= 0.75 then '<=0.75'
When @LTV_Range between 0.75 and 0.80 then '75-80'
When @LTV_Range between 0.80 and 0.90 then '80-90'
When @LTV_Range between 0.90 and 1.00 then '90-100'
When @LTV_Range >= 100 then '100+'
else null end
Return @Return
END
Для десятичного числа (4,3) ваш мин / макс составляет +/- 9.999, так почему этот "When @LTV_Range >= 100 then '100+'
"?
Далее, почему OPENQUERY отправляет вызов SQL в экземпляр DB2, включающий функцию SQL Server?
Полагаю, вы хотите, чтобы вызов функции + группировка + упорядочивание были снаружи. А где вы устанавливаете @LTV_Range?
Наконец, группирование + упорядочение в @LTV_Range не имеет смысла: это одно значение, поэтому я предполагаю, что вы хотите группировать / упорядочивать по результату вызова функции
declare @LTV_Range decimal(4,3)
Select top 600
s.LNumber, dbo.FN_LTV_Range(@LTV_Range)
from
OPENQUERY (SvrLink, '
Select Lnumber
from some_table s
where s.LNumber > '0'
for Fetch only with UR')
group by dbo.FN_LTV_Range(@LTV_Range)
Order by dbo.FN_LTV_Range(@LTV_Range)
Вопрос в его нынешнем виде не имеет смысла, извините, чтобы сказать ...