當前位置:編程學習大全網 - 源碼下載 - SQL2000,根據排班,員工信息表,批量生成考勤記錄表。

SQL2000,根據排班,員工信息表,批量生成考勤記錄表。

with pb as ( --每天排班的上班準點秒數與下班準點秒數

select 工號 id,

(case d1 when 10 then 8 when -10 then 20 when 8 then 8 else 0 end)*3600 sb1,

(case d1 when 10 then 20 when -10 then 32 when 8 then 17 else 64 end)*3600 xb1,

--...

(case d31 when 10 then 8 when -10 then 20 when 8 then 8 else 0 end)*3600 sb31,

(case d31 when 10 then 20 when -10 then 32 when 8 then 17 else 64 end)*3600 xb31

),

kq1 as (

select userid id, checktime ct, checktype type, row_number() over(order by checktime) rn

from c

),

kq2 as ( --必須保證有上班就有下班且同壹天上班只有1個,否則要去重

select t1.id, day(t1.checktime) dd, --幾號

datediff(ss, cast(convert(char(10), t1.ct, 120) as datetime, t1.ct) sb, --上班秒數

datediff(ss, cast(convert(char(10), t1.ct, 120) as datetime, t2.ct) xb --下班秒數

from kq1 t1 join kq1 t2 on t1.id=t2.id and t1.rn=t2.rn+1

where t1.type='I'

),

kq as (

select id,

max(case when dd=1 then sb end) sb1, max(case when dd=1 then xb end) xb1,

---...

max(case when dd=31 then sb end) sb2, max(case when dd=31 then xb end) xb31,

from kq2

group by id

)

select ui.userid, ui.name,

case when kq.sb1<=pb.sb1 then '準點' else '不準點' end sb1,

case when kq.xb1>=pb.xb1 then '準點' else '不準點' end xb1,

--...

case when kq.sb31<=pb.sb31 then '準點' else '不準點' end sb31,

case when kq.xb31>=pb.xb31 then '準點' else '不準點' end xb31

from userinfo ui left join pb on ui.userid=pb.id

left join kq on ui.userid=kq.id

大致如此,沒測,自己看明白後按自己需求改吧

  • 上一篇:flac和ape那個音質更好
  • 下一篇:《H5匠人手冊》1:H5交互流程
  • copyright 2024編程學習大全網