во время кодирования моего проекта я столкнулся с препятствием и не могу решить эту проблему ...
вот что я хотел бы достичь, у меня есть простая таблица, в которой хранятся данные, связанные с футболистами, такими как: Число (ID), Имя, Цели (являются дополнительными, но сейчас они не имеют значения), и я создал таблицу многоуровневых функций UDF LotOfGoals, которая выглядит следующим образом:
CREATE FUNCTION LotOfGoals()
RETURNS @Players TABLE
(
Number INT,
Name VARCHAR(20),
Goals INT
FuzzyLevel FLOAT(3) --extra column which I would like to add to result
)
AS
BEGIN
INSERT @Players
SELECT Number, Name, Goals
FROM FuzzyFootballTeam
WHERE Goals > 2
ORDER BY Number
-- here FuzzyLevel column should include data counted by MembershipLevel
-- scalar UDF.
-- I want to pass each number of goals into MembershipLevel function and
-- insert return value into a new column FuzzyLevel.
RETURN
END
GO
теперь функция MembershipLevel:
CREATE FUNCTION MembershipLevel(@Goals INT)
RETURNS float(3)
AS
BEGIN
DECLARE @Level float(3)
SET @Level = 0.25*@Goals - 0.5;
RETURN @Level
END
Как я уже писал, после предложения WHERE я хотел бы передать каждое количество целей в MembershipLevel, а затем вставить его возвращаемое значение в новый столбец FuzzyLevel.
Я был бы очень благодарен залюбая подсказка, идея и т. д. Заранее спасибо!
Правда, я перейду на встроенный.Еще один вопрос, есть ли способ использовать столбец FuzzyLevel в предложении где?(Я получаю недопустимое имя столбца FuzzinessLevel). Я хочу ограничить допустимый уровень fuzzylevel.Я расширил обе функции еще одним дополнительным аргументом @AcceptedFuzzyLevel float, и скалярная функция выглядит следующим образом:
DECLARE @Level float(3)
DECLARE @TempLevel float(3)
IF (@Goals <= 2)
SET @TempLevel = 0;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
ELSE IF (@Goals > 2 AND @Goals < 6)
SET @TempLevel = 0.25*@Goals - 0.5;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
ELSE IF (@Goals >= 6)
SET @TempLevel = 1;
IF (@TempLevel >= @FuzzyLevelAccepted)
SET @Level = @TempLevel;
RETURN @Level
Но после выполнения я также получаю записи со значениями NULL.
ОК, яисправили это.Только что решил следующее неравенство: x> 4y + 2. Работает, но мне любопытно, почему нельзя использовать новый столбец в предложении Where.
Спасибо миллион!