1.薪水表,如下所示,要求:为下一年调整工资22000以下的员工涨工资10%,24000以上的员工减少10%

 

 

 思考:如果先update薪水24000以上的员工,假设某工资为24000,24000*(1-10%)=21600;然后调整22000以下工资员工的时候,这位员工工资会被再一次被修改。不符合预期政策。同样若先更新22000以下员工同样会出现工资更新后超过24000,被重复更新的两次的情况,比如21900*1.1=24090。

结论:必须所有数据一次更新

sql:

update salary SET SALARY =
  case  when SALARY > 2400 then SALARY*0.9
  when SALARY < 2200 then  SALARY*1.1 else SALARY end

注意: else SALARY end必须写,不然2200—2400区间的员工工资会被更新为null。

case子句没有明确指定else会被默认处理成else null

先到这里,困死~