如何解决CASE语句错误?

时间:2013-06-03 21:03:39

标签: sql-server sql-server-2008 sql-server-2005

我有一个名为runTotal的字段名,它是一个整数。

我正在尝试一个CASE语句,将值分配给最高总数:

select (case when isnull(t.runtotal,90) = 0 then 'You have reached max total' else t.runtotal end) runtotal

我收到以下错误:

Conversion failed when converting the varchar value 'Class is full' to data type int

如果我删除Else t.runtotal,它可以工作,但我们希望代码中的其他内容,因为默认值应为90.

任何想法如何解决这个问题?

非常感谢提前

3 个答案:

答案 0 :(得分:3)

那是因为你要返回不同的数据类型 第一部分是返回varchar,而else部分返回一个数字。

select 
-- this condition returns a varchar
(case when isnull(t.runtotal,90) = 0 then 'You have reached max total' 
-- else condition is returning a number
else t.runtotal 
end) runtotal.

返回值的数据类型应相同 请更正。

答案 1 :(得分:0)

此代码说

select (case when isnull(t.runtotal,90) = 0 
   then 'You have reached max total'
   else t.runtotal end)  runtotal

如果runTotal = 0,请返回一个字符串,其中包含消息文本“您已达到最大总数”。 否则,给我一个整数,告诉我总计

这就是说,给我一个错误消息字符串,或者运行总计转换为字符串的内容

select (case when isnull(t.runtotal,90) = 0 
   then 'You have reached max total'
   else Str(t.runtotal) end)  runtotal

答案 2 :(得分:0)

我终于解决了这个问题。以下是最终解决方案:

(case when isnull(t.runtotal,9) = 0 then 'You have reached max total'
 else  str(isnull(t.runtotal,9)) end) runtotal