2

2 つの文字列の値を合計しようとしています。そのために、文字列を 10 進数にキャストし、それらを合計してから、出力用に文字列にキャストし直します。また、エントリの重複を避けるために max を使用します。SPに次の行があります。

Cast( Max(CASE WHEN QuestionID = 261 THEN CAST(Answer AS decimal) ELSE '' END) + Max(CASE WHEN QuestionID = 260 THEN CAST(Answer AS decimal) ELSE '' END) AS varchar) as Total

Answer フィールドは varchar(max) で、デフォルト値は '' です。
問題は、エラー メッセージが表示されることです: データ型 varchar を数値に変換中にエラーが発生しました

4

2 に答える 2

3

失敗している部分は内側のケースです:

CASE WHEN QuestionID = 261
     THEN CAST(Answer AS decimal)
     ELSE '' END

式 ( egabove CASE) は、1 つのデータ型のみを返す必要があります。この場合、10 進数と varchar (空の文字列 '') の両方を返すことはできません。型の優先順位により、どちらの分岐からの結果も 10 進数にキャストされます。いずれかの行に が含まれている場合QuestionID != 261、それ''を 10 進数にキャストしようとし、bam - エラーになります。

あなたはこれを必要とします:

Cast( Max(CASE WHEN QuestionID IN (261,260) AND ISNUMERIC(ANSWER) = 1
               THEN CAST(Answer AS decimal)
               ELSE 0 END)
   AS varchar) as Total
于 2013-05-03T10:05:46.977 に答える
0

これはもう少し読みやすいです..

Cast(Max(CASE WHEN QuestionID = 261 THEN CAST(Case When Answer = '' Then 0 Else CAST(Answer as decimal(9,2)) End as decimal(9,2))End ) + Max(CASE WHEN QuestionID = 260 THEN CAST(Case When Answer = '' Then 0 Else CAST(Answer as decimal(9,2)) End as decimal(9,2))End )AS varchar(Max)) as Total

于 2013-05-03T10:19:38.047 に答える