计算两个值之间的百分比
Calculate percentage between two values
我有两列包含数字,我试图计算它们之间的百分比差异并在另一列中显示结果,但结果似乎是错误的。
这是有问题的代码。
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 以及 returns 17。另一个例子是 2 和 100。这只是 returns 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
我检查过这个link,这似乎是我正在做的。
Percentage difference between two values
我也试过这个代码:
NULLIF(COUNT(Submitted.ClaimNumber),0) - NULLIF(COUNT(ApprovalProvision.ClaimNumber),0)
/ NULLIF(COUNT(Submitted.ClaimNumber),0) * 100
以 2 和 100 为例,returns -4998 实际差异是减少 98%。
为了完成,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,则结果应为 return 0,因为如果原始数字为 0,则无法计算百分比。如果原始值为 X,新值为 0,我应该显示减少 100%。
这将在所有列中进行,但无需用其余列填充页面,因为所有计算都将以相同的方式进行。
有人看出我哪里做错了吗?
我不明白你为什么使用 (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 - 100,因为 submitted.claimnumber 除以自身是 1 乘以 100 是 100。
4900 这个数字听起来确实不错。举个例子,你有2个苹果,然后再给你98个,得到100个苹果。
增加 98% 意味着从 2 个苹果,您将有 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%。
希望这能解决您的问题。
我有两列包含数字,我试图计算它们之间的百分比差异并在另一列中显示结果,但结果似乎是错误的。
这是有问题的代码。
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 以及 returns 17。另一个例子是 2 和 100。这只是 returns 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
我检查过这个link,这似乎是我正在做的。
Percentage difference between two values
我也试过这个代码:
NULLIF(COUNT(Submitted.ClaimNumber),0) - NULLIF(COUNT(ApprovalProvision.ClaimNumber),0)
/ NULLIF(COUNT(Submitted.ClaimNumber),0) * 100
以 2 和 100 为例,returns -4998 实际差异是减少 98%。
为了完成,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,则结果应为 return 0,因为如果原始数字为 0,则无法计算百分比。如果原始值为 X,新值为 0,我应该显示减少 100%。
这将在所有列中进行,但无需用其余列填充页面,因为所有计算都将以相同的方式进行。
有人看出我哪里做错了吗?
我不明白你为什么使用 (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 - 100,因为 submitted.claimnumber 除以自身是 1 乘以 100 是 100。
4900 这个数字听起来确实不错。举个例子,你有2个苹果,然后再给你98个,得到100个苹果。
增加 98% 意味着从 2 个苹果,您将有 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%。
希望这能解决您的问题。