在用于计算百分比的SQL Server中,我有一个如下函数:
CREATE FUNCTION [dbo].[fuGetPercentage] ( @part FLOAT, @total FLOAT )
RETURNS FLOAT
AS
BEGIN
DECLARE @Result FLOAT = 0, @Cent FLOAT = 100;
IF (isnull(@total, 0) != 0)
SET @Result = isnull(@part, 0) * @Cent / @total;
RETURN @Result
END
我不知道有没有更好的选择,相同的检查和更好的计算百分比如下:
SELECT (CASE ISNULL(total, 0)
WHEN 0 THEN 0
ELSE ISNULL(part, 0) * 100 / total
END) as percentage
我想在SELECT
之后直接使用它。
答案 0 :(得分:3)
使用ISNULL
等功能存在一个问题。在这种情况下,查询不会使用索引。如果代码之美并不是首先,那么你可以做类似的事情:
SELECT
CASE WHEN total * part <> 0 /* will check that both total and part are not null and != 0*/
THEN part * 100 / total
ELSE 0
END AS percentage;
答案 1 :(得分:0)
我使用@DmitrijKultasev回答但现在,我发现它有两个问题:
所以我把它改成了这个:
SELECT
CASE
WHEN total <> 0 AND part <> 0 THEN -- This will return 0 for Null values
part * 100 / total
ELSE
0
END AS percentage;