在 SQL 服务器管理中,如果不为空,则将值替换为 1

In SQL server management if not null then replace the value with one

ALTER FUNCTION [dbo].[Get_CGPA] (@s1 DECIMAL(20, 2), @s2 DECIMAL(20, 2), @s3 DECIMAL(20, 2), @s4 DECIMAL(20, 2), @s5 DECIMAL(20, 2), @s6 DECIMAL(20, 2), @s7 DECIMAL(20, 2), @s8 DECIMAL(20, 2)) RETURNS DECIMAL(20, 2) AS 
BEGIN
    DECLARE @cgpa DECIMAL(20, 2);
DECLARE @total DECIMAL(20, 2) = (
    COALESCE(@s1, 0) + COALESCE(@s2, 0) + COALESCE(@s3, 0) + COALESCE(@s4, 0) + COALESCE(@s5, 0) + COALESCE(@s6, 0) + COALESCE(@s7, 0) + COALESCE(@s8, 0)
);
DECLARE @DIV DECIMAL(20, 2) = (
    dbo.fun_notnull(@s1) + dbo.fun_notnull(@s2) + dbo.fun_notnull(@s3) + dbo.fun_notnull(@s4) + dbo.fun_notnull(@s5) + dbo.fun_notnull(@s6) + dbo.fun_notnull(@s7) + dbo.fun_notnull(@s8)
);
IF(@DIV = 0) 
BEGIN
    SET
        @DIV = NULL;
END
SET
    @cgpa = (
        @total / @DIV
    );
RETURN @cgpa 
END

我创建了另一个函数 (not_null) 以在参数非零时获取 1。还有其他选择吗?

问题不完全清楚,但听起来你想要 COALESCE() 函数:

COALESCE(SomeField, 1)

在作为除法运算结果的 GPA 上下文中,您可能还需要检查表达式下半部分的 0

COALESCE(NULLIF(SomeField,0),1)

你可以用这样的 case 语句来完成

 CASE WHEN SomeField is null THEN 1 ELSE null END as SomeField