2017-08-09 76 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

修復您的架構,你會解決這個問題,並在將來阻止許多其他人。您應該爲每列選擇適當的數據類型 - 不要盲目選擇某種類型的字符串,因爲它「更容易」。