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
I made another function (not_null) to get 1 if the parameter is non-zero. Is there any other alternative?