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