日期:2014-05-18  浏览次数:20563 次

考勤问题,有班次,有工作日历,有打卡记录,如何做考勤分析
考勤问题,有班次,有工作日历,有打卡记录,如何做考勤分析

SQL code

--班次
CREATE TABLE [dbo].[BANCI](
    [Code] [nvarchar](20) NOT NULL,
    [Item] [int] NOT NULL,
    [KTIME] [nvarchar](20) NULL,
    [KSTA] [nvarchar](20) NULL,
    [KLST] [nvarchar](20) NULL
) ON [PRIMARY]

--打卡记录
CREATE TABLE [dbo].[CardList](
    [Emp] [nvarchar](20) NULL,
    [CDate] [nvarchar](20) NULL,
    [CardTime] [nvarchar](20) NULL
) ON [PRIMARY]

--工作日历
CREATE TABLE [dbo].[WorkDate](
    [Emp] [nvarchar](20) NULL,
    [CDate] [nvarchar](20) NULL,
    [Banci] [nvarchar](20) NULL
) ON [PRIMARY]




等一下我整理些数据出来


------解决方案--------------------
http://so.csdn.net/search?t=thread&q=%e8%80%83%e5%8b%a4&category=A487DFB4-AD04-4694-AAE7-2BF358DE9B52,A8983D7F-322C-49E5-8EC2-548C623D1929,55B4468C-6FDE-444F-BDE0-6E82082B1B73,292A9CA6-1A8E-49BB-A408-6F79DF2268EF,F5ECBFE4-F43F-4CB9-9F32-EFEACF9FD57A&uname=&rname=&d1=2010-02-24&d2=2010-05-24&field=all
------解决方案--------------------
取出打卡记录,根据班次,工作日历来一个一个分析
------解决方案--------------------
全是nvarchar--最好用日期類型
------解决方案--------------------
最好貼數據,看你這結構真不會猜。

如果有沒有卡重復,日期為什麼是字符,存儲內容是,一個人同一天可上幾個班等等
------解决方案--------------------
參照
http://topic.csdn.net/u/20111012/14/e16ec358-61ca-46e4-ac3e-d7339a0f5404.html
------解决方案--------------------
考勤分析需要得到什么结果?
------解决方案--------------------
不知你要什么格式的,
SQL code

select a.emp,b.cdate,c.ctype+': '+
case when cast(a.cardtime as datetime) between cast(c.KSTA as datetime) and cast(c.KLST as datetime) then '正常'
else '未刷卡' end 'ctype'
from 
(select row_number() over(partition by cdate order by cardtime) rn,* from CardList) a 
inner join WorkDate b on a.emp=b.emp and a.cdate=b.cdate
inner join BANCI c on b.banci=c.code and a.rn=c.item
where b.banci is not null 

emp                  cdate                ctype
-------------------- -------------------- ----------------------------
YXX0004              2011-08-01           上午上班: 正常
YXX0004              2011-08-01           上午下班: 正常
YXX0004              2011-08-01           下午上班: 正常
YXX0004              2011-08-01           下午下班: 正常
YXX0004              2011-08-02           上午上班: 正常
YXX0004              2011-08-02           上午下班: 正常
YXX0004              2011-08-02           下午上班: 正常
YXX0004              2011-08-03           上午上班: 正常
YXX0004              2011-08-03           上午下班: 正常
YXX0004              2011-08-03           下午上班: 正常
YXX0004              2011-08-03           下午下班: 正常
YXX0004              2011-08-04           上午上班: 正常
YXX0004              2011-08-04           上午下班: 正常
YXX0004              2011-08-04           下午上班: 正常
YXX0004              2011-08-04           下午下班: 正常
YXX0004              2011-08-05           上午上班: 正常
YXX0004              2011-08-05           上午下班: 正常
YXX0004              2011-08-05           下午上班: 正常
YXX0004              2011-08-05           下午下班: 正常
YXX0004              2011-08-07           上午上班: 正常
YXX0004              2011-08-07           上午下班: 正常
YXX0004              2011-08-07           下午上班: 未刷卡
YXX0004              2011-08-07           下午下班: 正常
YXX0004              2011-08-08           上午上班: 正常
YXX0004              2011-08-08           上午下班: 正常
YXX0004              2011-08-08           下午上班: 正常
YXX0004              2011-08-08           下午下班: 正常
YXX0004              2011-08-09           上午上班: 正常
YXX0004              2011-08-09           上午下班: 正常
YXX0004              2011-08-09           下午上班: 正常
YXX0004              2011-08-09           下午下班: 正常
YXX0004              2011-08-10