2017-08-09 77 views
3

我试图计算出两个独立的字段的总和与查询试图总结错误消息在SQL Server结果两列

select sum(percent12 + percent21) as total 
from finalquery 

,但我不断收到此错误:

Msg 8117, Level 16, State 1, Line 535

Operand data type varchar is invalid for sum operator.

但是,如果我这样做:

select percent12 + percent21 as total 
from finalquery 

我得到:

(total) 
50.0040.00 
25.0025.00 
100.0 0.00 
100.0 0.00 
100.0 0.00 

我该如何解决这个问题?

回答

2

您的百分比列都是varchar,+运算符可以将字符串连接在一起,这就是您所看到的。
我建议你使用CASTNUMERIC数据类型,特别是因为你似乎在小数点后有一个固定的空格。

尝试以下操作:

SELECT 
    SUM(CAST(percent12 AS NUMERIC(10,2))+ CAST(percent21 AS NUMERIC(10,2))) AS total 
FROM finalquery 

也有人建议,你CASTFLOAT,虽然已经知道舍入误差(与已知的解决方法)

Float rounding error: SQL Server rounding Error, Giving different values

+0

谢谢你,这完美解决! – WWaldo

+0

非常欢迎 – Eli

1

看起来你试图求和的值是varchar/string类型,因此它们不能被总结。

尝试将它们转换当您使用+运营商在你的第二个查询总结

即在SQL服务器Select sum(convert(float,x1) + convert(float,x2))

1

之前为整数或浮点数(取决于类型),你实际上是连接两个字符串。你知道它们是字符串,因为错误消息告诉你它是一个varchar(即一个字符串)。

相反,您需要将每个字段转换为数字数据类型,然后将这些字段包装在聚合中。在这种情况下,我选择基于您的示例数据将其转换为十进制数据类型,但也可以将其转换为整数或其他数字数据类型。

SELECT SUM(CAST(percent12 AS DECIMAL(10, 4)) + CAST(percent21 AS DECIMAL(10, 4))) AS total 
FROM finalquery 

当然,显而易见的答案是停止将数字存储为字符串。如果你可以修改你的数据库模式,认真研究一下改变它。

0

修复您的架构,你会解决这个问题,并在将来阻止许多其他人。您应该为每列选择适当的数据类型 - 不要盲目选择某种类型的字符串,因为它“更容易”。