在sql server管理中,如果不为null,则将该值替换为1

tjjdgumg  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(331)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

11个月前关门了。
改进这个问题

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

我做了另一个函数(不是\u null),如果参数不为零,就得到1。还有别的选择吗?

r1zk6ea1

r1zk6ea11#

你可以用这样的案例陈述

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

i2byvkas2#

这个问题还不完全清楚,但听起来你想 COALESCE() 功能:

COALESCE(SomeField, 1)

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

COALESCE(NULLIF(SomeField,0),1)

相关问题