PostgreSQL,达到限制后更改值

时间:2017-09-22 17:55:58

标签: sql postgresql limit

我有以下表格

折扣订单

id | employee |
---|----------|
 1 |1         |
 2 |2         |
 3 |1         |
 4 |3         |
 5 |3         |
 6 |1         |
 7 |1         |
 8 |1         |
 9 |1         |

其他地方我有员工薪水。

我想做的是以下内容。

如果员工存在于折扣订单表中,请执行以下操作:

- > "折扣订单表中的第1行"从工资值中扣除30%并在"表X"上插入1行。使用employee_id和折扣价值。

- > "折扣订单表中的2行"从工资值中扣除30%,并在"表X"上插入2行。使用employee_id和折扣价值。

- > "折扣订单表中的3行"从工资值中扣除30%,并在"表X"上插入3行。使用employee_id和折扣价值。

- > "折扣订单表中的4行"从工资值中扣除30%,并在"表X"上插入3行。使用employee_id和折扣价值(3倍30%占薪水的90%)第4行插入行应为10%(达到工资的100%)

- > >"折扣订单表中的4行"为上述案例制定流程并忽略其余部分。 (因为你的折扣不能超过工资的100%)

如果员工#1在"折扣订单表"中获得1000美元并且有10行。 X表应该看起来像这样

id | employee | discount_value | discounts_orders_id
---|----------|----------------|--------------------
1  | 1        | 300            | 1
2  | 1        | 300            | 3
3  | 1        | 300            | 6
4  | 1        | 100            | 7

已编辑:

我找到了一个时间解决方案。

insert into "table x" ....
select (employee_salary * 0.30) from employee
inner join discounts_orders ....
limit 4

我插入4行(薪水* 0.30)然后我用(薪水* 0.10)更新1行

1 个答案:

答案 0 :(得分:0)

我会尝试使用子查询计算条目数量,然后使用CASE WHEN决定该因子:

insert into "table x" ....
select (employee_salary * 
  (CASE WHEN (SELECT COUNT(*) FROM discounts_orders as dior
             WHERE dior.employee=employee.id 
                  AND dior.id<=discounts_orders.id) < 4 
       THEN 0.30
       ELSE 0.10
       END)) from employee
inner join discounts_orders ....
limit 4