Я создал пользовательскую функцию, которая объединяет данные в зависимости от выбранного минимума, максимума и размера ячейки.
Он работает так, как предназначено для целых чисел, однако при использовании чисел с плавающей точкой, представляющих проценты, он не будет возвращать число в виде числа с плавающей запятой и, следовательно, не будет правильно складывать число.
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.
Я новичок в пользовательских функциях, у кого-нибудь есть советы?