我正在尝试计算佣金并根据佣金价值(佣金)我想更新列值fixed_fee
select st1.* ,(st1.order_item_value * st1.commission_rate)/100 commiss ,
if commiss < 50 then
update payment_error set fixed_fee = -5 where commiss <= 50
else if commiss >= 50 then
update payment_error set fixed_fee = -10 where commiss >=50
else
end if
from payment_error as st1 join payment_error as st2 on st1.order_item_id=st2.order_item_id ;
运行时然后出现错误:
ERROR: syntax error at or near "<"
LINE 2: if commiss<50 then
^
********** Error **********
ERROR: syntax error at or near "<"
SQL state: 42601
Character: 87
答案 0 :(得分:6)
您无法在SQL中使用if
。这仅适用于PL / pgSQL等过程语言。
但更重要的是,你不能在update
语句中嵌入select
语句。
您尝试执行的操作可以通过使用UPDATE
的单个CASE
语句完成:
update payment_error
set fixed_fee = case
when (order_item_value * commission_rate)/100 <= 50 then -5
else 5 --<<< different value here
end;
你在两种情况下都将fixed_fee设置为-5 - 我认为这是一个错字,你的意思是在委托人大于50时为案件分配不同的费用
答案 1 :(得分:0)
您无法一起使用更新和选择。要更新,您可以尝试:
update payment_error
set fixed_fee = case when (order_item_value * commission_rate * .01) < 50 then -5
else 5 --In your case you have use both as -5 so change it as per your reqm