首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

考勤有关问题,有班次,有工作日历,有打卡记录,怎么做考勤分析

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

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

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.cdateinner join BANCI c on b.banci=c.code and a.rn=c.itemwhere 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           上午上班: 正常YXX0004              2011-08-10           上午下班: 正常YXX0004              2011-08-10           下午上班: 正常YXX0004              2011-08-10           下午下班: 正常YXX0004              2011-08-11           上午上班: 正常YXX0004              2011-08-11           上午下班: 正常YXX0004              2011-08-11           下午上班: 正常YXX0004              2011-08-11           下午下班: 正常YXX0004              2011-08-12           上午上班: 正常YXX0004              2011-08-12           上午下班: 正常YXX0004              2011-08-12           下午上班: 正常YXX0004              2011-08-12           下午下班: 正常YXX0004              2011-08-14           上午上班: 正常YXX0004              2011-08-14           上午下班: 正常YXX0004              2011-08-14           下午上班: 未刷卡YXX0004              2011-08-14           下午下班: 正常YXX0004              2011-08-15           上午上班: 正常YXX0004              2011-08-15           上午下班: 正常YXX0004              2011-08-15           下午上班: 正常YXX0004              2011-08-15           下午下班: 正常YXX0004              2011-08-16           上午上班: 正常YXX0004              2011-08-16           上午下班: 正常YXX0004              2011-08-16           下午上班: 正常YXX0004              2011-08-16           下午下班: 正常YXX0004              2011-08-17           上午上班: 正常YXX0004              2011-08-17           上午下班: 正常YXX0004              2011-08-17           下午上班: 未刷卡YXX0004              2011-08-18           上午上班: 正常YXX0004              2011-08-18           上午下班: 正常YXX0004              2011-08-18           下午上班: 正常YXX0004              2011-08-18           下午下班: 正常YXX0004              2011-08-19           上午上班: 正常YXX0004              2011-08-19           上午下班: 正常YXX0004              2011-08-19           下午上班: 正常YXX0004              2011-08-19           下午下班: 正常YXX0004              2011-08-21           上午上班: 正常YXX0004              2011-08-21           上午下班: 正常YXX0004              2011-08-21           下午上班: 未刷卡YXX0004              2011-08-21           下午下班: 正常YXX0004              2011-08-22           上午上班: 正常YXX0004              2011-08-22           上午下班: 正常YXX0004              2011-08-22           下午上班: 正常YXX0004              2011-08-22           下午下班: 正常YXX0004              2011-08-23           上午上班: 正常YXX0004              2011-08-23           上午下班: 正常YXX0004              2011-08-23           下午上班: 正常YXX0004              2011-08-23           下午下班: 正常YXX0004              2011-08-24           上午上班: 正常YXX0004              2011-08-24           上午下班: 正常YXX0004              2011-08-24           下午上班: 正常YXX0004              2011-08-24           下午下班: 正常YXX0004              2011-08-25           上午上班: 正常YXX0004              2011-08-25           上午下班: 正常YXX0004              2011-08-25           下午上班: 正常YXX0004              2011-08-25           下午下班: 正常YXX0004              2011-08-26           上午上班: 正常YXX0004              2011-08-26           上午下班: 正常YXX0004              2011-08-26           下午上班: 正常YXX0004              2011-08-26           下午下班: 正常YXX0004              2011-08-28           上午上班: 正常YXX0004              2011-08-28           上午下班: 正常YXX0004              2011-08-28           下午上班: 未刷卡YXX0004              2011-08-29           上午上班: 正常YXX0004              2011-08-29           上午下班: 正常YXX0004              2011-08-29           下午上班: 正常YXX0004              2011-08-29           下午下班: 正常YXX0004              2011-08-30           上午上班: 正常YXX0004              2011-08-30           上午下班: 正常YXX0004              2011-08-30           下午上班: 正常YXX0004              2011-08-30           下午下班: 正常YXX0004              2011-08-31           上午上班: 正常YXX0004              2011-08-31           上午下班: 正常YXX0004              2011-08-31           下午上班: 正常YXX0004              2011-08-31           下午下班: 正常 


[解决办法]

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 '正常'when cast(a.cardtime as datetime)>cast(c.KLST as datetime) then '迟到'when cast(a.cardtime as datetime)<cast(c.KSTA 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.cdateinner join BANCI c on b.banci=c.code and a.rn=c.itemwhere 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           上午上班: 正常YXX0004              2011-08-10           上午下班: 正常YXX0004              2011-08-10           下午上班: 正常YXX0004              2011-08-10           下午下班: 正常YXX0004              2011-08-11           上午上班: 正常YXX0004              2011-08-11           上午下班: 正常YXX0004              2011-08-11           下午上班: 正常YXX0004              2011-08-11           下午下班: 正常YXX0004              2011-08-12           上午上班: 正常YXX0004              2011-08-12           上午下班: 正常YXX0004              2011-08-12           下午上班: 正常YXX0004              2011-08-12           下午下班: 正常YXX0004              2011-08-14           上午上班: 正常YXX0004              2011-08-14           上午下班: 正常YXX0004              2011-08-14           下午上班: 早退YXX0004              2011-08-14           下午下班: 正常YXX0004              2011-08-15           上午上班: 正常YXX0004              2011-08-15           上午下班: 正常YXX0004              2011-08-15           下午上班: 正常YXX0004              2011-08-15           下午下班: 正常YXX0004              2011-08-16           上午上班: 正常YXX0004              2011-08-16           上午下班: 正常YXX0004              2011-08-16           下午上班: 正常YXX0004              2011-08-16           下午下班: 正常YXX0004              2011-08-17           上午上班: 正常YXX0004              2011-08-17           上午下班: 正常YXX0004              2011-08-17           下午上班: 迟到YXX0004              2011-08-18           上午上班: 正常YXX0004              2011-08-18           上午下班: 正常YXX0004              2011-08-18           下午上班: 正常YXX0004              2011-08-18           下午下班: 正常YXX0004              2011-08-19           上午上班: 正常YXX0004              2011-08-19           上午下班: 正常YXX0004              2011-08-19           下午上班: 正常YXX0004              2011-08-19           下午下班: 正常YXX0004              2011-08-21           上午上班: 正常YXX0004              2011-08-21           上午下班: 正常YXX0004              2011-08-21           下午上班: 早退YXX0004              2011-08-21           下午下班: 正常YXX0004              2011-08-22           上午上班: 正常YXX0004              2011-08-22           上午下班: 正常YXX0004              2011-08-22           下午上班: 正常YXX0004              2011-08-22           下午下班: 正常YXX0004              2011-08-23           上午上班: 正常YXX0004              2011-08-23           上午下班: 正常YXX0004              2011-08-23           下午上班: 正常YXX0004              2011-08-23           下午下班: 正常YXX0004              2011-08-24           上午上班: 正常YXX0004              2011-08-24           上午下班: 正常YXX0004              2011-08-24           下午上班: 正常YXX0004              2011-08-24           下午下班: 正常YXX0004              2011-08-25           上午上班: 正常YXX0004              2011-08-25           上午下班: 正常YXX0004              2011-08-25           下午上班: 正常YXX0004              2011-08-25           下午下班: 正常YXX0004              2011-08-26           上午上班: 正常YXX0004              2011-08-26           上午下班: 正常YXX0004              2011-08-26           下午上班: 正常YXX0004              2011-08-26           下午下班: 正常YXX0004              2011-08-28           上午上班: 正常YXX0004              2011-08-28           上午下班: 正常YXX0004              2011-08-28           下午上班: 迟到YXX0004              2011-08-29           上午上班: 正常YXX0004              2011-08-29           上午下班: 正常YXX0004              2011-08-29           下午上班: 正常YXX0004              2011-08-29           下午下班: 正常YXX0004              2011-08-30           上午上班: 正常YXX0004              2011-08-30           上午下班: 正常YXX0004              2011-08-30           下午上班: 正常YXX0004              2011-08-30           下午下班: 正常YXX0004              2011-08-31           上午上班: 正常YXX0004              2011-08-31           上午下班: 正常YXX0004              2011-08-31           下午上班: 正常YXX0004              2011-08-31           下午下班: 正常 


[解决办法]

SQL code
USE tempdbgoWITH aAS(SELECT     a.[Emp],    a.[Banci],    a.CDate,--    b.[KSTA] AS [KSTA],--    c.CardTime,    打卡状态=case when CAST(c.[CardTime] AS DATETIME)<=[KTIME] and right(b.Ctype,2)=N'上班' then N'正常'                    when CAST(c.[CardTime] AS DATETIME)>[KTIME] and right(b.Ctype,2)=N'上班' then N'迟到'                    when CAST(c.[CardTime] AS DATETIME)>=[KTIME] and right(b.Ctype,2)=N'下班' then N'正常'                    when CAST(c.[CardTime] AS DATETIME)<[KTIME] and right(b.Ctype,2)=N'下班' then N'早退'                    else N'未打卡' end,    b.CtypeFROM [WorkDate] AS a    INNER JOIN [BANCI] AS b ON a.[Banci]=b.[Code]    LEFT  JOIN [CardList] AS c ON c.Emp=a.Emp AND c.CDate=a.CDate AND CAST(c.[CardTime] AS DATETIME) BETWEEN b.[KSTA] AND b.[KLST])SELECT *FROM aPIVOT (MAX(打卡状态) FOR Ctype IN(上午上班,上午下班,下午上班,下午下班,加班上班,加班下班)) AS b /*Emp    Banci    CDate    上午上班    上午下班    下午上班    下午下班    加班上班    加班下班YXX0004    10    2011-08-01    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-02    迟到    正常    正常    未打卡    未打卡    未打卡YXX0004    10    2011-08-03    迟到    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-04    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-05    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-07    迟到    正常    未打卡    正常    未打卡    未打卡YXX0004    10    2011-08-08    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-09    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-10    迟到    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-11    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-12    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-14    正常    正常    未打卡    正常    未打卡    未打卡YXX0004    10    2011-08-15    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-16    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-17    迟到    正常    未打卡    正常    未打卡    未打卡YXX0004    10    2011-08-18    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-19    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-21    正常    正常    未打卡    正常    未打卡    未打卡YXX0004    10    2011-08-22    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-23    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-24    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-25    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-26    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-28    正常    正常    未打卡    正常    未打卡    未打卡YXX0004    10    2011-08-29    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-30    正常    正常    正常    正常    未打卡    未打卡YXX0004    10    2011-08-31    正常    正常    正常    正常    未打卡    未打卡*/ 

热点排行