主题:求考勤统计问题(加分哦)
zjyaoo
[专家分:90] 发布于 2005-12-27 08:57:00
一个考勤表 有卡号帐号,和卡号对应的考勤时间如
ID CardNo Time
1 001 2005-12-1 7:50:00
2 001 2005-12-1 17:09:00
3 002 2005-12-1 6:50:00
......
我先统计出一天考勤人数。
SELECT COUNT(CardNo) AS Expr1
FROM ( SELECT DISTINCT CardNo
FROM 表
where 时间条件2005-12-1 00:00:00 到2005-12-1 23:59:59)
---------------
以上是可以统计出一天的考勤人数的,但我怎么才能统计出几天时间或者一个月的
总考勤人数呢?
难道一定要一天一天的统计,然后累加吗?求助兄弟们[em2]
回复列表 (共13个回复)
沙发
cipc [专家分:2280] 发布于 2005-12-27 11:38:00
可以把WHERE里面改为:比如:where 时间条件2005-12-1 00:00:00 到2005-12-10 23:59:59
就是说从12-1到12-10的总数
板凳
zjyaoo [专家分:90] 发布于 2005-12-27 13:47:00
没有那么容易的呀,我求的是考勤人数,因为考虑到一天当中有人刷多次卡,所以就用了distinct,这样统计出一天的考勤人数,如果超过一天的话,那就有相同的卡号在刷卡,那还是统计不出来的。
3 楼
凭栏 [专家分:240] 发布于 2005-12-27 15:09:00
*************这是你的语句,统计一天的没问题,多天就达不到目的**********
SELECT COUNT(CardNo) AS Expr1
FROM ( SELECT DISTINCT CardNo
FROM 表
where 时间条件2005-12-1 00:00:00 到2005-12-1 23:59:59)
******************************************************************
我的方法是转换日期格式 然后统计, 语句如下,你试试看:
SELECT COUNT(CardNo) AS Expr1
FROM ( select CardNo,CONVERT(varchar(12) , Time, 111 ) as Time
from 考勤表
where 时间条件2005-12-1 00:00:00 到2005-12-10 23:59:59))
******************************************************************
4 楼
tujun [专家分:1190] 发布于 2005-12-27 15:23:00
到底要统什么?
是每天考勤人数
还是一段时间内考勤的人数(不重复)?
还是一段时间内考勤的人次?
SELECT COUNT(*) AS Expr1,CarNo FROM 表
where (时间条件2005-12-1 00:00:00 到2005-12-31 23:59:59)
Group By CarNo
5 楼
zjyaoo [专家分:90] 发布于 2005-12-27 18:38:00
是一段时间内考勤的人数(不重复)
转换日期格式的目的是什么呀?
我现在的问题是:卡号第二天还要刷卡,
想要一个时间段内的总的考勤(总的刷卡数,如第一天刷卡30人,第二天刷卡28人,那总刷卡数就是58人。要这个数据的)
------------------------
而我现在只能先一天一天的统计,然后累加(很笨的方法)。不知道有没要更好的办法了~~~~,拜托兄弟们了~~~
6 楼
zjyaoo [专家分:90] 发布于 2005-12-29 10:16:00
还是没有人帮忙看一下呀,
我只有用累加每天的刷卡人数的办法,然后循环天数,再累加,得出总的刷卡人数,很笨的方法~~~~~~
7 楼
franchdream [专家分:1450] 发布于 2005-12-29 10:41:00
昨天我就看了,除了累加我想不出有什么好的办法。
8 楼
凭栏 [专家分:240] 发布于 2005-12-29 15:58:00
**************************************
楼主,我3楼的方法不行么?
************************************
9 楼
zjyaoo [专家分:90] 发布于 2005-12-29 16:31:00
3楼方法不行的。
我用累加的方法计算了,谢谢帮助了
10 楼
凭栏 [专家分:240] 发布于 2005-12-31 12:18:00
***********************************************************************
不好意思,3楼我的写法少了个distinct, 改好的语句如下:
SELECT COUNT(CardNo) AS Expr1
FROM ( select DISTINCT CardNo,CONVERT(varchar(12) , Time, 111 ) as Time
from 考勤表
where 时间条件2005-12-1 00:00:00 到2005-12-10 23:59:59))
******************************************************************
我来回复