我需要通过划分两个SUM变量来获得百分比。但是当我尝试下面的代码时,它会给我0作为结果。如何划分这两个SUM?
谢谢!
(SUM(当FinalApprovalDt不为空时的情况和ContractPayoutAmt> 0然后1,否则0结束)/ SUM(当FinalApprovalDt不为空时为1,否则为0结束时的情况)* 100)作为WriteRate
答案 0 :(得分:2)
SQL Server执行整数运算,因此1/2为0而不是0.5。
您可以使用case
表达式中的非整数来写这个:
(SUM(Case when FinalApprovalDt is not null and ContractPayoutAmt > 0 Then 100.0 else 0 End) /
SUM(Case when FinalApprovalDt is not null then 1 end)
) As WriteRate
请注意,我从分母中删除了else
。这有助于防止被零除错误。
您也可以在没有明确划分的情况下将其写为:
AVG(Case when FinalApprovalDt is not null and ContractPayoutAmt > 0 Then 100.0
when FinalApprovalDt is not null then 0
End) as WriteRate
这使用FinalApprovalDt
非空的所有行的平均值,使用另一列的逻辑。
答案 1 :(得分:1)
强制其中一个DataSource=/sitecore/content/data/country sites&ExcludeTemplatesForDisplay=Country Site
表达式具有小数精度:
CASE
我怀疑SQL Server将两个1.0 * SUM(CASE WHEN FinalApprovalDt IS NOT NULL AND ContractPayoutAmt > 0
THEN 1 ELSE 0 END) /
SUM(CASE WHEN FinalApprovalDt IS NOT NULL
THEN 1 ELSE 0 END)* 100 AS WriteRate
表达式都视为整数。分割整数时,您可能会发生截断。因此,对于小于1的商,您只能看到零。
注意:我不知道你为什么要除以100.对于一个百分比,我希望你将分子乘以100。
答案 2 :(得分:0)
请尝试这样(使用1.0将分子的SUM加倍,使其成为小数,否则将得到整数除法。)
SUM(Case When FinalApprovalDt is not null and ContractPayoutAmt > 0 Then 1 else 0 End) * 1.0
/ SUM(Case when FinalApprovalDt is not null then 1 else 0 end) * 100.0 ) As WriteRate