2013-06-03 5 views
-1

У меня есть имя поля под названием 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.

Любые идеи, как чтобы исправить это?

Большое спасибо заранее

+1

Вы можете исправить это с помощью литья 'runtotal' до значения VARCHAR' отбрасываемой (t.runtotal как VARCHAR (10)) ', то типы данных будут одинаковыми. – Taryn

ответ

0

Я, наконец, решить этот проблема. Ниже окончательное решение:

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

Это потому, что вы возвращаете различные типы данных.
Первая часть возвращает varchar, тогда как другая часть возвращает число.

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. 

Тип данных возвращаемого значения должен быть таким же.
Пожалуйста, исправьте его.

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 
+0

Все, кто ответил, очень благодарю вас. @shahkalpesh, я не вижу разницы между вашим решением и моим. Infact, когда я побежал, я получаю ту же ошибку, что и тот, который я опубликовал. Sparky, никаких ошибок с вашей, но опять же, вместо значения по умолчанию 90, когда runtotal имеет значение null, все строки пустые. Любые другие идеи, как это решить? –

+0

Что вы хотите отображать, когда runTotal имеет значение NULL? Вы можете сделать IsNull (t.runtotal, 90) как RunTotal, если вы хотите отобразить его, но вы сравниваете его в своем коде ... Добавьте примерный ожидаемый результат, и я думаю, что люди смогут прояснить SQL для вас ... – Sparky

+0

Да, я могу показать 90, когда runTotal имеет значение null с isNull (t.runtotal, 90) как runTotal, но мы хотим также отображать «Вы достигли максимального количества», когда значение равно 0. Это камнем преткновения. Я не уверен, кто вычитал 2 очка. Я думал, что они делают это, когда ваш вопрос не ясен. Этот вопрос не мог быть яснее. Когда приложение запускается в первый раз, мы хотим загрузить значение как 90, и мы продолжим считать до 0. Я видел что-то подобное на этом форуме, но это не работает для меня. –

Смежные вопросы