问题描述
我正在尝试使用分区来计算总数的百分比,并且需要计算结果超过 6 位小数。我有数百万条记录,因此我需要将计算扩展到小数点后 6 位以求和为总数的 100%。
我尝试将结果转换为 18 位小数,但我仍然得到小数点后第 6 位以外的所有零。
任何帮助将不胜感激!
=ArrayFormula(if(len(A2:A),countifs(A2:A,"<>",row(A2:A),"<="&row(A2:A)),))
[结果截图]
更新:感谢您的回复!我尝试将所有内容都转换为十进制(分子、分母和结果),但仍然在小数点后第 6 位全为零。也许问题出在 Partition by 上?
SELECT
ISNULL(SUM(c.PaidOriginal),0) / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS percentoftotal,CAST(ISNULL(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS DECIMAL(38,18)) AS percentoftotal
FROM c
解决方法
在除法之前将第一个或第二个数字转换为您想要的精度:
SELECT
ISNULL(SUM(c.PaidOriginal),0) / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS percentoftotal,CAST(ISNULL(SUM(c.PaidOriginal),0) AS DECIMAL(38,18)) / SUM(NULLIF(SUM(c.PaidOriginal),0) ) OVER (PARTITION BY c.calyr) AS percentoftotal
FROM c
dbfiddle here