2016-09-25 11 views
0

は、私が4202 & 203の合計を取得しようと、このコードを使用するが、それは私がエラーを返すSQL:和演算子のvarchar型が無効に

SELECT * 
FROM 
(SELECT id,fieldNumber,fieldData FROM iso_fields) AS SourceTable 
PIVOT 
(
SUM(fieldData) 
FOR fieldNumber IN ([4],[202],[203]) 
) AS PivotTable; 

エラー:

Operand data type varchar is invalid for sum operator. 

理由:

Table using varchar instead of int 

私はそれについて何ができますか?テーブルを元に戻す方法はありません。

+2

なぜあなたは 'varchar'カラムに数値を格納していますか?それをしないでください。 –

+0

技術的に16進数を格納しています – user3165474

+2

それは正当な理由ではありません。それを 'integer'カラムとして格納し、それを表示するときにそれを16進数に変換します。 –

答えて

3

fieldDataのデータ型はvarcharなのでエラーです。 fieldData列にvarcharのデータがない場合、をソースクエリのINTに明示的に変換することができます。

SELECT * 
FROM 
(SELECT id,fieldNumber, fieldData FROM iso_fields) AS SourceTable 
PIVOT 
(
MAX(fieldData) 
FOR fieldNumber IN ([4],[202],[203]) 
) AS PivotTable; 
+0

私のカラムのように、varcharデータがあります。溶液? – user3165474

+0

@ user3165474 - 'id、fieldNumber&fieldData'の組み合わせに重複がない場合は、' MAX'集合体を使用してください。私の答えを更新しました。 –

+0

私は何を意味するのですか?ありがとう – user3165474

1

すべてfieldData値が数値であることを確認した場合、あなたはcastconvertを使用することができます。

SELECT * 
FROM 
(SELECT id,fieldNumber,fieldData FROM iso_fields) AS SourceTable 
PIVOT 
(
SUM(cast(fieldData as int)) 
FOR fieldNumber IN ([4],[202],[203]) 
) AS PivotTable; 

しかしfieldDataの数値については確保されていない場合、あなたはtry_castまたはtry_convert(SQL Serverを使用することができます2012年以降):

SELECT * 
FROM 
(SELECT id,fieldNumber,fieldData FROM iso_fields) AS SourceTable 
PIVOT 
(
SUM(try_cast(fieldData as int)) 
FOR fieldNumber IN ([4],[202],[203]) 
) AS PivotTable; 
関連する問題