在标量 SQL 函数中通过 id 访问特定行值

Accessing specific row value by id in a scalar SQL function

如何在函数中使用 table 'course' by 'course_id' 字段 'ranking' 的特定值?如果参数给出的值较高,我需要 return 1,如果值较低,则需要 0。因此,我需要以某种方式基于 course_id 作为参数从 table 获取数据。

CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)
    RETURNS INT
    AS
    BEGIN
        RETURN 
            CASE 
                WHEN @course_id.ranking > @user_ranking THEN 1
                ELSE 0
            END 
    END

函数returns 0或1后我需要显示:

如果调用函数 returns 1,则显示“ 的排名高于分数”,否则显示“ 的排名低于分数”。

示例数据:

course_id | course_name | ranking
    1     |     GIT     |   10
    2     |     CSS     |   2
    3     |     C++     |   6

我需要比较 course_id = 1 的排名,例如 10 与作为参数给出的随机数。 course_id 也作为参数给出。

例如: 如果用户选择作为输入参数(course_id = 1 和 user_ranking = 5) 预期结果:

我假设您可能想要这样的东西(没有应要求提供预期结果):

--Note you will have to DROP your old function if already exists as a scalar function first.
--You cannot ALTER a scalar function to be a table function.
CREATE OR ALTER FUNCTION dbo.f_rank (@course_id INT, @user_ranking INT)  
RETURNS table
AS RETURN
    SELECT CONVERT(bit, CASE WHEN C.ranking > @user_ranking THEN 1 ELSE 0 END) AS SomeColumnAlias --Obviusly give this a proper name
    FROM dbo.Course C
    WHERE C.Course_id = @course_id;
GO

正如我提到的,我使用内联 table 值函数,因为这可能会更高效,而且你没有提到你的 SQL 服务器版本(所以不知道如果你在 2019 年,那么可以使用可内联标量函数)。