我有大约940行的表格。我正在创建一个专门的计算,需要解决以下问题:
对于每一行,我可以乘A多少次而不会超过B。
我创建了一个UDF来做到这一点,如下所示:
DECLARE @x int;
DECLARE @Result decimal(18,4);
DECLARE @CutOff int;
SELECT @x=0, @CutOff=1000, @Result=null;
WHILE (((@Result < @tVal) or (@Result IS NULL)) AND @x < @CutOff) BEGIN
SET @x = @x + 1;
SET @Result = @hProb * @x;
END
IF (@x = @CutOff)
SET @x = -1;
RETURN @x;
@tVal是我们希望实现的目标值。
@CutOff是要乘以的最大数字,如果x达到该数字并且仍未超过目标值,则停止循环并返回负数
这可以工作,但是我的SP通常需要大约20秒才能运行,而当我添加此功能时,它会增加大约6.5分钟的处理时间。
如果可能的话,我希望有一个更有效的方法来执行此操作,但到目前为止我找不到更好的解决方案。
感谢所有帮助。
最佳答案
select case
when @hProb * @Cutoff <= @tVal then -1
else floor(@tVal / @hProb)
end;
根据参数的实际数据类型,它可能会有副作用。
关于sql-server - TSQL代数-求解x((a)x <b),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25446985/