Foxtable(狐表)用户栏目专家坐堂 → 纯SQL计算年假---请参考


  共有2115人关注过本帖树形打印复制链接

主题:纯SQL计算年假---请参考

帅哥哟,离线,有人找我吗?
fox-man
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2731 威望:0 精华:0 注册:2014/3/11 12:11:00
纯SQL计算年假---请参考  发帖心情 Post By:2020/1/9 16:45:00 [只看该作者]

年假计算方法,经测试可用,如有需要请拿走.
案例引用(如图)

图片点击可在新窗口打开查看此主题相关图片如下:年假.png
图片点击可在新窗口打开查看

计算代码如下(可自定义日期,仅需将getdate() 替换为指定日期即可): 
s  elect   id 员工ID,  userWorkTime 入司时间, ngongl AS 工龄,bnkynj AS 可用年假,GETDATE() as 计算时间
from 
(
s  elect id,userWorkTime,yybnrq,dqrq,ndrq,ngongl,jnygts,jndts,kn,
CASE 
WHEN Ngongl < 1    and yybnrq > dqrq  THEN 0 
when Ngongl =1 and yybnrq <= dqrq and kn = 1 then ROUND( CAST ( cast(jndts as numeric(12,2))/ 365 * 5 AS NUMERIC (4, 2)), 2 )  
when Ngongl =1 and yybnrq > dqrq and kn > 1 then 5
when Ngongl >1 and Ngongl <10 then 5 


when Ngongl =10  and yybnrq > dqrq  and kn = 10 then 5 
when Ngongl =10  and yybnrq <= dqrq and kn = 10 then ROUND( CAST (cast(jnygts as numeric(12,2))/ 365 * 5 AS NUMERIC(4, 2)), 2 ) + ROUND( CAST ( cast(jndts as numeric(12,2))/ 365 * 10 AS NUMERIC (4, 2)), 2 ) 
when Ngongl =10  and yybnrq > dqrq and kn > 10 then 10
when Ngongl >10 and Ngongl <20  and kn >10 then 10 



when Ngongl =20  and yybnrq > dqrq  and kn = 20 then 10 
when Ngongl =20  and yybnrq <= dqrq   and kn = 20 then ROUND( CAST (cast(jnygts as numeric(12,2))/ 365 * 10 AS NUMERIC(4, 2)), 2 ) + ROUND( CAST ( cast(jndts as numeric(12,2))/ 365 * 15 AS NUMERIC (4, 2)), 2 ) 
when Ngongl =20  and yybnrq > dqrq and kn > 20 then 15
when Ngongl >20 and Ngongl <20  and kn >20 then 15 
when Ngongl >20 then 15 
else  0
end bnkynj 
from
(
s elect   id,userWorkTime,dqrq,ndrq,yybnrq,ngongl,kn,
(datediff(day,yybnrq,ndrq))as jndts,  ---距年底天数
365-(datediff(day,yybnrq,ndrq))as jnygts --已过天数
from
(
S ELECT  id, --员工ID  
CONVERT(varchar(100), userWorkTime, 23)userWorkTime, --入司日期
CONVERT(varchar(100), getdate(), 23)dqrq,--当前日期 
CAST (CAST (year (getdate())as varchar)+'-'+'12'+'-'+'31'AS DATE ) AS ndrq, --年底日期
CAST (CAST (year (getdate())as varchar)+'-'+SUBSTRING(convert(char(10),userWorkTime,120),6,10) AS DATE ) AS yybnrq , --入司时间引用至本年同日期
datediff(day, CONVERT(varchar(100), userWorkTime, 23),getdate())/365 AS Ngongl, -- 工龄
year(getdate()) - year(userWorkTime) kn  -- 跨自然年
FROM tableA )a)b)t 



 
[此贴子已经被作者于2020/1/9 16:49:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
xxfoxtable
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1698 积分:15894 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2020/1/9 17:38:00 [只看该作者]

 感谢分享

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/10 8:49:00 [只看该作者]

多谢分享!

 回到顶部