日期:2014-05-18 浏览次数:20563 次
--班次 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]
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