我有这样一个字段  要求,
在职员工工资大于2000的按两千计算,工资小于600的按照600计算。
如果是退休人员,工资在500一下的按照500块。高限不变。
下面是显示数据:
  人员类别  工资
   在职     1120
   退休     800
   退休     400
   退休     380
   在职     5120
   在职     3920
   退休     800
   退休     400
   退休     380 我要的结果如下:
  人员类别  工资
   在职     1120
   退休     800
   退休     400
   退休     380
   在职     2000
   在职     2000
   退休     800
   退休     500
   退休     500

解决方案 »

  1.   

    可以写个procedure。根据你的条件不同,进行不同的处理
      

  2.   

    select decode(substr(to_char(2000-工资,'S9999'),1,1),'-',2000,工资) from 工资表
      

  3.   

    select
      人员类别,
      decode(人员类别,'退休',
        decode(sign(工资-500),-1,500,工资),'在职',
        decode(sign(工资-600), -1, 600,
          deocde(sign(2000-工资),-1,2000,工资)),
        null) 工资
    from
      工资表
      

  4.   

    用case,好像稍好一些:
    select t.人员类别,  (case  
         when t.人员类别 = '退休' and .... then
           .....
         when t.item_id = '在职' and .... then
           ....
         else
             ....
       end ) AS 工资 
      from tab t
      

  5.   

    decode是不能判断大小,
    case比较麻烦,万一人员类别变化还要更新视图,很麻烦。
    procedure就是不知道如何写!!
      

  6.   

    select a.*,
    case when a.工资<b.工资下限 then b.工资下限
    when a.工资>b.工资上限 then b.工资上限
    else a.工资
    FROM 工资 a inner join 类型上下限 b
    on a.人员类别=b.人员类别