百分比变化返回错误结果

时间:2018-08-27 11:35:57

标签: sql sql-server-2016 percentage

我在这里待了大约2个小时。我正在尝试计算两个金额之间的百分比变化。这是当前代码。

RejectedVsSubmittedSum = ((CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END
                                 -ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0))
                                 /NULLIF(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0))
                                 * 100

此行返回225000。

CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END

此行返回25000。

ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)

部门。

NULLIF(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)

然后我乘以100。

因此225000-25000/25000 * 100返回 800 。这就是我要返回的内容,但是基于此网站http://www.percent-change.com/index.php?y1=225000&y2=25000,我的结果是错误的,我应该返回-88.88888888%。

我在SQL中进行这些计算没有任何实际经验,因此我认为网站是正确的。有人可以看看我是否真的在做错什么吗?

我已经问过这个Calculate percentage between two values,但是现在我使用的是一组不同的数字,我现在使用的是金额而不是计数。我尝试使用相同的逻辑(因为这样做很有意义),但似乎返回的结果是错误的。

1 个答案:

答案 0 :(得分:0)

根据公式((y2 - y1) / y1)*100,您的查询应如下所示。

RejectedVsSubmittedSum = ( ( (ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0) ) 
    - (CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END) ) 
          / (CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END) ) * 100


y1: CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END
y2: ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)