首页 新闻 会员 周边

SQL; 数据更新;高手解决下.根据员工工龄给员工涨工资,1年工龄增加1个job_lvl,但不能超过该职位的最高level

0
悬赏园豆:15 [已解决问题] 解决于 2010-08-30 13:01

update a
set    a.job_lvl=case when a.job_lvl+age1>b.job_lvl then b.job_lvl else a.job_lvl+age1 end
From   (select emp_id,job_id,job_lvl,
case when dateadd(year,datediff(year,hire_date,getdate()),hire_date)>hire_date
then datediff(year,hire_date,getdate()) else datediff(year,hire_date,getdate())-1 end age1, hire_date
from employee) a,(select job_id,max(job_lvl) job_lvl from employee group by job_id) b
where a.job_id=b.job_id

这个更新结果,与题目要求结果不一样,下面附查询结果,这个需要加什么条件(如 第一行,最大工资是100了,更新数据后  工龄增加后工资  依然是 最大工资100,第二行;而没有超过最大工资 更新数据后  工龄增加后工资为244)

job_lvl      emp_id            工龄            最大工资           工龄增加后工资

100          PSA89086M     19               100                       119
225          VPA30890F      19                225                       244
100          H-B39728F       20                100                       120
200          L-B31947F       19                 200                       219
250          F-C16315M      19                250                        269
250          PTC11962M     20                 250                        270
165           A-C71970F     18                165                           183
225          AMD15433F     19                225                          244
175          ARD36773F       17             175                         192

sj3136456的主页 sj3136456 | 初学一级 | 园豆:35
提问于:2010-08-30 09:16
< >
分享
最佳答案
0

update a set 工龄增加后工资=case when jov_lvl+工龄>最大工资 then 最大工资 else jov_lvl+工龄 end

收获园豆:15
清海扬波 | 小虾三级 |园豆:825 | 2010-08-30 09:21
你好 ;谢谢大哥! 我先按你的思路写下 !
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 09:24
update a set (YEAR (GETDATE() - hire_date)- 1900)+job_lvl = case when job_lvl +(GETDATE() - hire_date)- 1900) >max_lvl then max_lvl else (jov_lvl+YEAR (GETDATE() - hire_date)- 1900) end 消息 102,级别 15,状态 1,第 1 行 '(' 附近有语法错误。
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 09:31
set之后是一个列名,而不是表达式。
清海扬波 | 园豆:825 (小虾三级) | 2010-08-30 09:36
update a set 工资增加后工资= case when job_lvl +(GETDATE() - hire_date)- 1900) >max_lvl then max_lvl else (jov_lvl+YEAR (GETDATE() - hire_date)- 1900) end
清海扬波 | 园豆:825 (小虾三级) | 2010-08-30 09:37
update a set 工资增加后工资= case when job_lvl +(GETDATE() - hire_date)- 1900) >max_lvl then max_lvl else (jov_lvl+YEAR (GETDATE() - hire_date)- 1900) end 在应使用条件的上下文(在 ')' 附近)中指定了非布尔类型的表达式。
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 09:50
update a set 工资增加后工资= case when job_lvl +datediff(year,hire_date,GETDATE()) >max_lvl then max_lvl else jov_lvl+datediff(year,hire_date,GETDATE()) end 你的语句里面太多问题了,用这个吧。
清海扬波 | 园豆:825 (小虾三级) | 2010-08-30 09:59
呵呵 不好意思!让你 烦心了 !! 我是菜鸟的么 !!
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 10:00
你好 大哥 工资增加后工资 列名 是 在语句执行后自己生成德一列哈
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 10:03
如果是update,不可能有自己生成的列,要么你就用select 吧。 select 工资增加后工资= case when job_lvl +datediff(year,hire_date,GETDATE()) >max_lvl then max_lvl else jov_lvl+datediff(year,hire_date,GETDATE()) end from tb
清海扬波 | 园豆:825 (小虾三级) | 2010-08-30 10:06
你好··谢谢你大哥! 这个也没有效果·要不加我的Q 196536910!
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 10:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册