我正在运行以下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 !!
答案 0 :(得分:4)
你的演员打破了这个。它没有足够的空间给你超过六位小数。你所说的实际上是“给我这个除法最多六位小数的结果”,然后你很惊讶结果只有六位小数:) :)
解决方案要么省略强制转换(如果数据类型为money
,则没关系),要么增加scale
的{{1}},例如。 decimal
。 decimal(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
谢谢..让我知道这是否有效