我是SQL的新手,我正在尝试从两个预先计算的数字计算百分比。我希望百分比为2小数点。数字是整数,所以我在百分比计算之前将它们作为小数点。计算只是
(Risk1 / GrandTotal * 100)来自同一张桌子。
下面给出了一段代码:
SELECT risk_date_day,
((CAST(Risk1 as decimal(38,2))/CAST(GrandTotal as decimal(38,2))) * 100) FROM DPRAT2_Export
The result shows 6 numbers after the decimal
我为十进制(x,x)的参数尝试了许多不同的数字。我从研究中了解到,第二个数字是比例,它指定小数点后的位数。我不确定为什么结果有6位小数。请帮忙。谢谢!
答案 0 :(得分:2)
在分割之后执行cast()
:
SELECT risk_date_day,
CAST(Risk1 * 100.0 / GrandTotal as decimal(38, 2))
FROM DPRAT2_Export;
一般而言,SQL尤其是SQL Server具有非常神秘的规则,用于确定小数位数学运算结果中的小数点数。所以,只需转换结果。
如果存在GrandTotal
可能为零的风险,我建议:
SELECT risk_date_day,
CAST(Risk1 * 100.0 / NULLIF(GrandTotal, 0) as decimal(38, 2))
FROM DPRAT2_Export;
这可以防止被零除错误,而是返回NULL
。