当前位置: 代码迷 >> Sql Server >> 计算指定日期上工的次数
  详细解决方案

计算指定日期上工的次数

热度:39   发布时间:2016-04-24 09:41:47.0
计算指定日期上班的次数
表一:
 员工姓名 员工工号 刷卡时间
 蔡燕 20513 2014-6-27 18:20:45
蔡燕 20513 2014-6-27 18:20:47
蔡燕 20513 2014-6-30 8:14:54
蔡燕 20513 2014-7-1 8:17:51
蔡燕 20513 2014-7-1 18:10:50
蔡燕 20513 2014-7-2 8:16:55
蔡燕 20513 2014-7-2 20:09:44
蔡燕 20513 2014-7-3 8:25:18
蔡燕 20513 2014-7-3 18:04:02
蔡燕 20513 2014-7-3 18:04:48
蔡燕 20513 2014-7-3 18:04:50
艾云东 11304 2014-06-27 08:04:18
艾云东 11304 2014-06-27 16:40:50
艾云东 11304 2014-06-24 08:06:47
艾云东 11304 2014-06-24 10:04:23
艾云东 11304 2014-06-24 20:40:39
艾云东 11304 2014-06-25 08:03:31
艾云东 11304 2014-06-25 20:40:19
我筛选出每个员工6月27-30日和7月1-2日这几天上班的次数,即:
员工姓名   上班次数
秦燕     4
艾云东  1


------解决思路----------------------
select 员工工号,员工姓名,COUNT(*) as counts
 from cte
where CONVERT(date,convert(datetime,刷卡时间),112) between '2014-06-27' and '2014-07-02'
group by 员工姓名,员工工号
------解决思路----------------------

select 员工工号,员工姓名,COUNT(distinct CONVERT(date,convert(datetime,刷卡时间),112)) as counts
 from cte
where CONVERT(date,convert(datetime,刷卡时间),112) between '2014-06-27' and '2014-07-02'
group by 员工姓名,员工工号

楼上写错了 不好意思
------解决思路----------------------
--居然多个时间段,那就只能写脚本,不方便写方法了。
DECLARE @BeginDate date='2014-6-27' ;
DECLARE @EndDate date='2014-6-30' ;
DECLARE @BeginDate2 date='2014-7-1' ;
DECLARE @EndDate2 date='2014-7-2' ;

WITH T(员工姓名,员工工号,刷卡时间)AS (
SELECT '蔡燕','20513','2014-6-27 18:20:45' UNION ALL
SELECT '蔡燕','20513','2014-6-27 18:20:47' UNION ALL
SELECT '蔡燕','20513','2014-6-30 8:14:54' UNION ALL
SELECT '蔡燕','20513','2014-7-1 8:17:51' UNION ALL
SELECT '蔡燕','20513','2014-7-1 18:10:50' UNION ALL
SELECT '蔡燕','20513','2014-7-2 8:16:55' UNION ALL
SELECT '蔡燕','20513','2014-7-2 20:09:44' UNION ALL
SELECT '蔡燕','20513','2014-7-3 8:25:18' UNION ALL
SELECT '蔡燕','20513','2014-7-3 18:04:02' UNION ALL
SELECT '蔡燕','20513','2014-7-3 18:04:48' UNION ALL
SELECT '蔡燕','20513','2014-7-3 18:04:50' UNION ALL
SELECT '艾云东','11304','2014-06-27 08:04:18' UNION ALL
SELECT '艾云东','11304','2014-06-27 16:40:50' UNION ALL
SELECT '艾云东','11304','2014-06-24 08:06:47' UNION ALL
SELECT '艾云东','11304','2014-06-24 10:04:23' UNION ALL
SELECT '艾云东','11304','2014-06-24 20:40:39' UNION ALL
SELECT '艾云东','11304','2014-06-25 08:03:31' UNION ALL
SELECT '艾云东','11304','2014-06-25 20:40:19' 
)
select T.员工姓名,COUNT(distinct CAST(T.刷卡时间 as DATE)) 上班次数
from t
where CAST(T.刷卡时间 as DATE)between @BeginDate and @EndDate
or CAST(T.刷卡时间 as DATE)between @BeginDate2 and @EndDate2
group by T.员工姓名
  相关解决方案