SET C.cust_level = CASE
WHEN A.total_purchase>2 THEN C.cust_level='3'
WHEN A.total_purchase>0 AND A.total_purchase<3 THEN >C.cust_level='2'
ELSE C.cust_level='1'
END
Это выражение CASE имеет проблему. Вы указываете, какой столбец должен обновляться до CASE (SET C.cust_level = ...), но ссылаетесь на них внутри CASE (... THEN C.cust_level = '3'). CASE должен вернуть единственное значение, которое будет присвоено указанному столбцу.
Это должно быть написано:
SET C.cust_level = CASE
WHEN A.total_purchase > 2 THEN '3'
WHEN A.total_purchase > 0 AND A.total_purchase < 3 THEN '2'
ELSE '1'
END
Наконец: КОГДА условия оцениваются одно за другим, и CASE останавливается на первом совпадении. Таким образом, хотя функциональность эквивалентна, это можно упростить как:
SET C.cust_level = CASE
WHEN A.total_purchase > 2 THEN '3'
WHEN A.total_purchase > 0 THEN '2'
ELSE '1'
END