我建立了一个自定义函数,可根据所选的最小,最大和容器大小对数据进行容器分类。
它按预期用于整数,但是当使用代表百分比的浮点数时,它不会将数字作为浮点数返回,因此不会正确地对数字进行分箱。
CREATE FUNCTION bucket (
-- Add the parameters for the function here
@min FLOAT
,@max FLOAT
,@size FLOAT
,@number FLOAT
)
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @Result FLOAT
DECLARE @bucket FLOAT= @size
DECLARE @found VARCHAR(15) = 'N'
-- Add the T-SQL statements to compute the return value here
WHILE @found = 'N'
BEGIN
IF @number <= @min
BEGIN
SET @Result = @min
SET @found = 'Y'
END
ELSE IF @number <= @bucket
BEGIN
SET @Result = @bucket
SET @found = 'Y'
END
ELSE IF @number >= @max
BEGIN
SET @Result = @max
SET @found = 'Y'
END
SET @bucket = @bucket + @size
END
-- Return the result of the function
RETURN @Result
END
GO
我确定可以改进函数的逻辑,但是我只是在寻找返回浮点数的方法,这样我就不必将其百分比乘以100即可。
这就是我所说的:
SELECT dbo.bucket(0.0,1.0,0.1,0.74)
返回1,但使用整数时:
SELECT dbo.bucket(0.0,100.0,10,74)
这正确返回80
我希望第一个调用返回0.8。
我是自定义功能的新手,有人有什么建议吗?