2

この行をクエリに追加すると:

convert(varchar(20), convert(varchar(20),
sum(case when tsr.other like '%aa%' then tsr.block1 else 0 end) +
sum(case when tsr.other like '%aa%' then tsr.block2 else 0 end) +
sum(case when tsr.other like '%aa%' then tsr.block3 else 0 end) +
sum(case when tsr.other like '%aa%' then tsr.block4 else 0 end)) * 450) 

次のエラー メッセージが表示されます。

varchar 値 '0.00' をデータ型 int に変換するときに変換に失敗しました

ブロック列のデータは日です - 例10.0

何か案は?

450 を 450.0 に変更したところです。

varchars の理由は、これが複数の結合された select ステートメントの 1 つからの 1 行にすぎないためです。

4

2 に答える 2

1

10.0は整数ではありません-小数です。

試す

declare @i int 
select @i = convert(decimal(9,4),'10.0')
select @i

また、decimalからintへの変換は暗黙的に行われます。

于 2012-11-02T11:50:53.893 に答える
1
 '10.0' isn't an int/decimal  - it's a varchar .   
 do any mathematical calculation only on decimal/numeric/float/int values.

 SELECT convert(varchar(20), convert(decimal(10,2), sum(case when
 tsr.other like '%aa%' then  convert(decimal(10,2),tsr.block1) else 0
 end) + sum(case when tsr.other like '%aa%' then 
 convert(decimal(10,2),tsr.block2) else 0 end) + sum(case when
 tsr.other like '%aa%' then  convert(decimal(10,2),tsr.block3) else 0
 end) + sum(case when tsr.other like '%aa%' then 
 convert(decimal(10,2),tsr.block4) else 0 end)) * 450)
于 2012-11-02T12:34:21.627 に答える