在 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
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