Sum函数没有给出具有除法功能的足够小数位

时间:2014-03-13 09:10:44

标签: sql

我正在运行以下sql查询:

select sum(cast(mkt_value as decimal(20,7)))/1204438043.37 from table1

我得到以下结果是正确的,但我需要至少10个小数位而不是6:

0.009347

如果我运行以下查询:

select sum(mkt_value) from table1

我得到11258490.2400。

如果我在excel中将11258490.24除以1204438043.37,我会得到0.009347504674,这就是我正在寻找的答案。

请帮我纠正我的SQL !!

3 个答案:

答案 0 :(得分:4)

你的演员打破了这个。它没有足够的空间给你超过六位小数。你所说的实际上是“给我这个除法最多六位小数的结果”,然后你很惊讶结果只有六位小数:) :)

解决方案要么省略强制转换(如果数据类型为money,则没关系),要么增加scale的{​​{1}},例如。 decimaldecimal(20, 11)类型的第二个参数表示数字中的最大小数位数(-1)。另外,请考虑仅汇总总和而不是所有项目。

请注意,MS SQL中的大多数操作都返回相同数据类型的值。所以:

decimal

同样的事情发生在select 3 / 4; -- Returns 0 select cast(1000 as smallint) * cast(1000 as smallint); -- Error - 1 000 000 is too big for smallint 以及紧随其后的分裂中:)

答案 1 :(得分:0)

您需要在计算最终值

后应用强制转换
select CAST (sum(mkt_value)/1204438043.37 as decimal(15,10)) from table1.

这意味着结果将包含最多15位数字和10位小数点。

答案 2 :(得分:0)

我建议使用以下查询,因为您的最终小数位被截断。因此您的最终结果集需要强制转换。

select 
cast(cast (sum(mkt_value) as decimal(20,7))/cast (1204438043.37 as decimal(20,7)) as decimal(20,12)) from table1

谢谢..让我知道这是否有效

相关问题