2017-08-09 16 views
3

を2つの列を合計しようとすると、私は、クエリエラーメッセージにSQL Serverの結果に

select sum(percent12 + percent21) as total 
from finalquery 

を持つ2つの別々のフィールドの合計を計算しようとしているが、私はこのエラーを取得しておいてください。

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である場合、+演算子は文字列を連結して表示することができます。
NUMERICデータ型にはCASTを使用することをお勧めします。特に、小数点の後に固定量のスペースがあるようです。

試してみてください。

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

その他はあなたFLOATCAST、それは丸め誤差が知られているが(と知られている回避策)

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

+0

ありがとう、これは完璧に機能しました! – WWaldo

+0

あなたは大歓迎です – Eli

1

あなたが合計しようとしている値はvarchar/string型なので、それらを集計することはできません。

はあなたの2番目のクエリに+演算子を使用している場合は、あなたが実際に2つの文字列を連結しているSQL ServerのSelect sum(convert(float,x1) + convert(float,x2))

1

すなわちを合計する前に、(タイプに依存)、それらが整数またはフロートに変換してください。エラーメッセージがvarchar(つまり文字列)であることを示すため、文字列であることがわかります。

代わりに、各フィールドを数値データ型に変換し、それらを集計でラップする必要があります。この場合、サンプルデータに基づいて10進データ型としてキャストすることを選択しましたが、整数またはその他の数値データ型としてキャストすることもできます。

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

当然明らかなのは、数値を文字列として保存しないことです。データベーススキーマを変更できる場合は、真剣にその変更を検討してください。

0

があなたのスキーマを修正し、あなたが解決することを示唆していますこの問題を回避し、将来他の多くのものを防ぐ。各列に適切なデータ型を選択する必要があります。文字列の種類を盲目的に選択するだけではなく、「より簡単な」ためです。

関連する問題