if条件下的Postgres语法错误

时间:2015-03-25 07:32:35

标签: sql postgresql postgresql-9.2

我正在尝试计算佣金并根据佣金价值(佣金)我想更新列值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

2 个答案:

答案 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