我有两列保存的数字是我要计算的百分比之间的差异,并在另一列中显示结果,但是结果似乎是错误的。
这是有问题的代码。
SELECT
GenPar.ParameterValue AS ClaimType,
COUNT(Submitted.ClaimNumber) AS SubmittedClaims,
COUNT(ApprovalProvision.ClaimNumber) AS ApprovedClaims,
COUNT(Declined.ClaimNumber) AS DeclinedClaims,
COUNT(Pending.ClaimNumber) AS PendingClaims,
ISNULL(SUM(SubmittedSum.SumInsured),0) AS TotalSubmittedSumInsured,
ISNULL(SUM(ApprovedSum.SumInsured),0) AS TotalApprovedSumInsured,
ISNULL(SUM(RejectedSum.SumInsured),0) AS TotalRejectedSumInsured,
ISNULL(SUM(PendingSum.SumInsured),0) AS TotalPendingSumInsured,
--This column is to show the diff in %
CASE WHEN COUNT(Submitted.ClaimNumber) <> 0 AND COUNT(ApprovalProvision.ClaimNumber) <> 0
THEN (COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100
ELSE 0
END
我需要的是显示SubmittedClaims和ApprovedClaims列之间的百分比差异。任何列,或两者都可以包含零,也可以不包含零。
因此,据我所知:COUNT(Submitted.ClaimNumber)-COUNT(ApprovalProvision.ClaimNumber)/ COUNT(Submitted.ClaimNumber)* 100据我所知。
我已经尝试过了,它的一个例子是,当1和117之间的差减少了99.15%时,它需要1和117并返回17。另一个示例是2和100。这仅返回0,而差是减少98%。
CASE WHEN COUNT(Submitted.ClaimNumber) <> 0 AND COUNT(ApprovalProvision.ClaimNumber) <> 0
THEN (COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100
ELSE 0
END
我检查了此链接,这似乎是我在做什么。
Percentage difference between two values
我也尝试过以下代码:
NULLIF(COUNT(Submitted.ClaimNumber),0) - NULLIF(COUNT(ApprovalProvision.ClaimNumber),0)
/ NULLIF(COUNT(Submitted.ClaimNumber),0) * 100
以2和100为例,当实际差异减少98%时返回-4998。
为完成起见,Submitted.ClaimNumber是这部分代码:
LEFT OUTER JOIN (SELECT * FROM Company.Schema.ClaimMain WHERE CurrentStatus=10)Submitted
ON Submitted.ClaimNumber = ClaimMain.ClaimNumber
ApprovalProvision.ClaimNumber是这样的:
LEFT OUTER JOIN (SELECT * FROM Company.Schema.ClaimMain WHERE CurrentStatus=15)ApprovalProvision
ON ApprovalProvision.ClaimNumber = ClaimMain.ClaimNumber
理想情况下,此列也将处理0。因此,如果一个值为0,另一个为X,则结果应返回0,因为如果原始数为0,则无法计算百分比。如果原始值为X,而新值为0,则我应显示减少100%。
这将在所有列上发生,但由于所有计算都将以相同的方式进行,因此无需用其余列填充页面。
有人看到我在做什么错吗?
答案 0 :(得分:1)
我不熟悉为什么使用(x,0)作为语法
但是我看到你有
(COUNT(ApprovalProvision.ClaimNumber),0) - (COUNT(Submitted.ClaimNumber),0)
/COUNT(Submitted.ClaimNumber) * 100
应该不是,
( COUNT(ApprovalProvision.ClaimNumber) - COUNT(Submitted.ClaimNumber) )
/COUNT(Submitted.ClaimNumber) * 100
看起来好像要对ApprovalProvision.ClaimNumber进行计数-自提交以来。ClaimNumber为100。声明数本身除以1乘以100即得到100。
4900号码实际上听起来正确。让我们以下面的示例为例,您有2个苹果,然后又得到98个,得到100个苹果。
如果增加2个苹果,则意味着增加98%,您将拥有3.96个苹果。
增加100%表示从2个苹果开始,您以4个苹果结束。增加1000%意味着从2个苹果开始,您将获得22个苹果。因此4000%表示您以82个苹果结束。 5000%表示来自2个苹果,您可以达到102个苹果。
(100-2)/ 2 * 100 = 98/2 = 49 * 100 = 4900,所以如果您从2个苹果开始并达到100个,则苹果数量似乎增加了4900%。
现在,如果您将2和100进行了翻转,例如从100开始,那么现在有2, (2-100)/ 100 * 100 = -98,所以苹果变了-98%,下降了98%。
希望这可以解决您的问题。