字段内容判断过滤的问题(现谢谢各位大侠了)

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

我要的结果如下:
人员类别 工资
在职 1120
退休 800
退休 400
退休 380
在职 2000
在职 2000
退休 800
退休 500
退休 500
...全文
233 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
世A界 2007-02-25
  • 打赏
  • 举报
回复
decode是不能判断大小,
case比较麻烦,万一人员类别变化还要更新视图,很麻烦。
procedure就是不知道如何写!!
世A界 2007-02-25
  • 打赏
  • 举报
回复
各位辛苦,我要的是对于一个字段过滤,和其他字段没有关系。其实,人员类别有100多种,根本不能用这个,而且人员类别一直在变化。
我的是针对一个字段的判断。例如,工资大于2000的显示2000,小于200的显示300,从数据库端实现低保高限的规则。
icedut 2007-02-25
  • 打赏
  • 举报
回复
select a.*,
case when a.工资<b.工资下限 then b.工资下限
when a.工资>b.工资上限 then b.工资上限
else a.工资
FROM 工资 a inner join 类型上下限 b
on a.人员类别=b.人员类别
icedut 2007-02-25
  • 打赏
  • 举报
回复
再用case就可以解决了
icedut 2007-02-25
  • 打赏
  • 举报
回复
是否可以加一张表
人员类别 工资
在职 600 2000
退休 500 2000


每种类型上下限,写在表中
做个查询即可
以后又变化只是修改表中数据而已


小李木耳 2006-12-14
  • 打赏
  • 举报
回复
用case,好像稍好一些:
select t.人员类别, (case
when t.人员类别 = '退休' and .... then
.....
when t.item_id = '在职' and .... then
....
else
....
end ) AS 工资
from tab t
tianyacao007 2006-12-13
  • 打赏
  • 举报
回复
select
人员类别,
decode(人员类别,'退休',
decode(sign(工资-500),-1,500,工资),'在职',
decode(sign(工资-600), -1, 600,
deocde(sign(2000-工资),-1,2000,工资)),
null) 工资
from
工资表
doer_ljy 2006-12-13
  • 打赏
  • 举报
回复
select decode(substr(to_char(2000-工资,'S9999'),1,1),'-',2000,工资) from 工资表
tgm78 2006-12-13
  • 打赏
  • 举报
回复
可以写个procedure。根据你的条件不同,进行不同的处理

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧