UPDATE: В свете следующего комментария от автора вопроса
I changed the code code as described by you, but it's still throwing an error. "Conversion failed when converting the varchar value '23787.1' to data type int"
Похоже quan
в varchar
типа, а не numeric
, а также его с изменением ошибок было подтверждено, что prod
является определяется как integer
.
select *,
case when CAST(prod AS VARCHAR(MAX))='CPU' and CAST(quan as DECIMAL(10,4))>1000 then 1000
when CAST(prod AS VARCHAR(MAX))='MOUSE' and CAST(quan as DECIMAL(10,4))>1024 then 1024
when CAST(prod AS VARCHAR(MAX))='MONITOR' and CAST(quan as DECIMAL(10,4))<2 then 2 else CAST(quan as DECIMAL(10,4)) end as quan
from products_test;
Old answer: Please try this modified query :
select *,
case when CAST(prod AS VARCHAR(MAX))='CPU' and quan>1000 then 1000
when CAST(prod AS VARCHAR(MAX))='MOUSE' and quan>1024 then 1024
when CAST(prod AS VARCHAR(MAX))='MONITOR' and quan<2 then 2 else quan end as quan
from products_test;
if this works successfully, the Prod
is in fact defined as int
and you can never get the then
(true case) values in CASE
statements.
Вы, вероятно, нужно сравнить коды или внешние ключи из главной таблицы, которая имеет значение 'CPU', 'MOUSE' and 'MONITOR'
с продом.
Хорошо, 'prod' является' int'. Почему вы сравниваете его со строковым значением «CPU»? –
опубликуйте свои данные product_test – tharif
У него, вероятно, есть данные, что в таблице, где prod является int и не понимает. –