SQL员工在职人数

:emp
字段:id(员工ID) en_dt(入职日期) le_dt(离职日期)
日历表:cal
字段:dt


一个月在职一天,只算1/30个人
只计算2020-03-31

需求:员工在职人数

mont(月份) ps(在职人数)

 1 select 
 2  ms,cast(sum(if(ms = '1',ct/31,if(ms = '2',ct/29,ct/31))) as decimal(16,2)) ps 
 3  
 4  from (
 5     -- 聚合后知道在这个月上班的天数
 6     select ms,id,count(*) ct from (
 7         -- 在这个月上班的人
 8         select month(dt) ms ,id from cal join emp on dt between en_dt and nvl(le_dt,'9999-01-01')
 9     ) a group by ms,id
10 ) b 

 

posted on 2025-06-23 12:28  北京的小乔  阅读(11)  评论(0)    收藏  举报