2012-03-12 66 views
3

我呼吁产地来源证表和AMT的数据类型是Float和样本数据是这样的:VARCHAR FOR和运算无效

Acct Period F_year Amt 
Detf 1  2011  Null 
Detf 2  2011  Null 
Detf 3  2011  1669.57 
FTE 1  2011  3205.11 
FTE 2  2011  0 
FTE 3  2011  Null 

我写了类似的查询:

Select Acct,Period,F_year, Sum(AMT) as Amt 
from dbo.Cos 
Group By Acct,Period,F_year 
Where Amt is not null 

但我得到这个错误:

Msg 8117, Level 16, State 1, Line 1 
Operand data type varchar is invalid for sum operator. 

任何人都可以帮助我吗?

回答

15

尝试这样做:

Select Acct,Period,F_year, Sum(isnull(cast(AMT as float),0)) as Amt 
from dbo.Cos 
Group By Acct,Period,F_year 
+1

一如既往的快捷! – Taryn 2012-03-12 19:15:15

+0

@lcarus我仍然收到相同的错误消息 – peter 2012-03-12 19:16:35

+0

@peter更新了我的答案。试试看。 – Icarus 2012-03-12 19:17:19

2

如果Amt旨在用于数学运算,那么它应该是Decimal型,而不是varchar

+0

它是Float数据类型 – peter 2012-03-12 19:17:55

+0

@peter - 错误消息提示否则。如果它是'浮动',你不需要投它。所以我同意Maxx,列类型不应该是'varchar' – Leigh 2012-03-13 03:02:16

3

显然,值“1669.57”是一个字符串。那么将这个值添加到另一个值意味着什么?

错误消息是正确的:将文本值添加在一起无效。如果它是有效的,我不知道结果应该是什么。

您应该将列类型更改为数值类型,或者在尝试添加它之前以某种方式对其进行转换。