ACCESS数据库表1
-----------------------------------
id 编号 姓名 日期 备注
1 1 ABC 2010-10-1 08:15
2 1 ABC 2010-10-1 12:00
3 1 ABC 2010-10-1 14:20
4 1 ABC 2010-10-1 17:30
5 1 ABC 2010-10-2 08:13
6 1 ABC 2010-10-2 12:11
7 1 ABC 2010-10-2 14:22
8 1 ABC 2010-10-2 17:35
9 2 ABCD 2010-10-1 08:10
10 2 ABCD 2010-10-1 12:10
11 2 ABCD 2010-10-1 14:25
12 2 ABCD 2010-10-1 17:36
-----------------------------------------
现在我想得到
-------------------
编号 姓名 日期 a1 a2 a3 a4
1 ABC 2010-10-1 2010-10-1 08:15 2010-10-1 12:00 2010-10-1 14:20 2010-10-1 17:30
1 ABC 2010-10-2 2010-10-2 08:13 2010-10-2 12:11 2010-10-2 14:22 2010-10-2 17:35
2 ABCD 2010-10-1 2010-10-1 08:10 2010-10-1 12:10 2010-10-1 14:25 2010-10-1 17:36
------------------
请问如何实现.
谢谢!
-----------------------------------
id 编号 姓名 日期 备注
1 1 ABC 2010-10-1 08:15
2 1 ABC 2010-10-1 12:00
3 1 ABC 2010-10-1 14:20
4 1 ABC 2010-10-1 17:30
5 1 ABC 2010-10-2 08:13
6 1 ABC 2010-10-2 12:11
7 1 ABC 2010-10-2 14:22
8 1 ABC 2010-10-2 17:35
9 2 ABCD 2010-10-1 08:10
10 2 ABCD 2010-10-1 12:10
11 2 ABCD 2010-10-1 14:25
12 2 ABCD 2010-10-1 17:36
-----------------------------------------
现在我想得到
-------------------
编号 姓名 日期 a1 a2 a3 a4
1 ABC 2010-10-1 2010-10-1 08:15 2010-10-1 12:00 2010-10-1 14:20 2010-10-1 17:30
1 ABC 2010-10-2 2010-10-2 08:13 2010-10-2 12:11 2010-10-2 14:22 2010-10-2 17:35
2 ABCD 2010-10-1 2010-10-1 08:10 2010-10-1 12:10 2010-10-1 14:25 2010-10-1 17:36
------------------
请问如何实现.
谢谢!
SELECT 编号, 姓名, 日期,
max(iif(备注>=#8:00# and 备注<#12:00#,日期+备注)) as a1,
max(iif(备注>=#12:00# and 备注<#14:00#,日期+备注)) as a2
FROM 表1
GROUP BY 编号, 姓名, 日期
简单示例一下,时间间隔规则,取最大备注还是最小备注等规则自己的定...
--------------------------------------------------------
1 1 ABC 2010-10-1 08:15
2 1 ABC 2010-10-1 12:00
3 1 ABC 2010-10-1 14:20
4 1 ABC 2010-10-1 17:30
5 1 ABC 2010-10-2 08:13
6 1 ABC 2010-10-2 12:11
7 1 ABC 2010-10-2 14:22
8 1 ABC 2010-10-2 17:35
9 2 ABCD 2010-10-1 08:10
10 2 ABCD 2010-10-1 12:10
11 2 ABCD 2010-10-1 14:25
12 2 ABCD 2010-10-1 17:36
----------------------------------------------------------
现在我想得到
------------------------------------------------------------
编号 姓名 日期 a1 a2 a3 a4
--------------------------------------------------------------
1 ABC 2010-10-1 08:15 12:00 14:20 17:30
1 ABC 2010-10-2 08:13 12:11 14:22 17:35
2 ABCD 2010-10-1 08:10 12:10 14:25 17:36
-----------------------------------------------------------------
请问如何实现.
谢谢!
------------------------------------------------------------------
1 | 1 | ABC | 2010-10-1 | 08:15 |
2 | 1 | ABC | 2010-10-1 | 12:00 |
3 | 1 | ABC | 2010-10-1 | 14:20 |
4 | 1 | ABC | 2010-10-1 | 17:30 |
5 | 1 | ABC | 2010-10-2 | 08:13 |
6 | 1 | ABC | 2010-10-2 | 12:11 |
7 | 1 | ABC | 2010-10-2 | 14:22 |
8 | 1 | ABC | 2010-10-2 | 17:35 |
9 | 2 | ABCD | 2010-10-1 | 08:10 |
10 | 2 | ABCD | 2010-10-1 | 12:10 |
11 | 2 | ABCD | 2010-10-1 | 14:25 |
12 | 2 | ABCD | 2010-10-1 | 17:36 |
---------------------------------------------------------------
现在我想得到
-------------------------------------------------------------------
编号 | 姓名 | 日期 | a1 | a2 | a3 | a4
--------------------------------------------------------------------
1 | ABC | 2010-10-1 | 08:15 | 12:00 |14:20 | 17:30
1 | ABC | 2010-10-2 |08:13 |12:11 |14:22 | 17:35
2 | ABCD | 2010-10-1 | 08:10 |12:10 |14:25 | 17:36
--------------------------------------------------------------------
请问如何实现.
谢谢!
max(iif(备注>=#8:00# and 备注<#12:00#,备注)) as a1,
max(iif(备注>=#12:00# and 备注<#14:00#,备注)) as a2,
max(iif(备注>=#14:00# and 备注<#17:00#,备注)) as a3,
max(iif(备注>=#17:00#,备注)) as a4
FROM 表1
GROUP BY 编号, 姓名, 日期
或者jet下不行就用下面的:SELECT 编号, 姓名, 日期,
max(iif(备注>=#8:00# and 备注<#12:00#,备注,null)) as a1,
max(iif(备注>=#12:00# and 备注<#14:00#,备注,null)) as a2,
max(iif(备注>=#14:00# and 备注<#17:00#,备注,null)) as a3,
max(iif(备注>=#17:00#,备注,null)) as a4
FROM 表1
GROUP BY 编号, 姓名, 日期
sele 1
use oldtable
sele 2
use newtable
sele 1
scan
m.编号=编号,m.姓名=姓名,m.日期=日期,m.时间=时间
do case
case hour(m.时间)=8
sele 2
repl 编号, 姓名, 日期, a1 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=12
sele 2
repl 编号, 姓名, 日期, a2 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=14
sele 2
repl 编号, 姓名, 日期, a3 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=17
sele 2
repl 编号, 姓名, 日期, a1 with m.编号, m.姓名, m.日期,m.时间
endcase
wait
set talk off
set time 24
sele 1
use oldtable
sele 2
use newtable
sele 1
scan
m.编号=编号,m.姓名=姓名,m.日期=日期,m.时间=时间
do case
case hour(m.时间)=8
sele 2
appe blank
repl 编号, 姓名, 日期, a1 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=12
sele 2
appe blank
repl 编号, 姓名, 日期, a2 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=14
sele 2
appe blank
repl 编号, 姓名, 日期, a3 with m.编号, m.姓名, m.日期,m.时间
case hour(m.时间)=17
sele 2
appe blank
repl 编号, 姓名, 日期, a4 with m.编号, m.姓名, m.日期,m.时间
endcase
wait
以上只是提供思路,在vfp中像这类数据库的问题是比较容易处理的,不知道vb是如何处理的?
另外8楼的代码是如何判断备注字段的?楼主并没有说明备注字段的内容。
楼主难道不是需要旧表中所有的时间都需要导入到新表中?
TO: 楼主
如果考勤光靠你这个表的备注字段的时间来分班是不可靠的,三班倒的时间会有交叉的,在交叉的时间段,打卡的时间是上班还下斑几乎无法分清,特别还混有加班等情况,建议你修改下表结构,增加打卡时间字段,用备注标示是上班打卡还是下班打卡等信息...这样比较好处理...
------------------------------------------------------------------
1 | 1 | ABC | 2010-10-1 | 08:15 |
2 | 1 | ABC | 2010-10-1 | 12:00 |
3 | 1 | ABC | 2010-10-1 | 14:20 |
4 | 1 | ABC | 2010-10-1 | 17:30 |
5 | 1 | ABC | 2010-10-2 | 08:13 |
6 | 1 | ABC | 2010-10-2 | 12:11 |
7 | 1 | ABC | 2010-10-2 | 14:22 |
8 | 1 | ABC | 2010-10-2 | 17:35 |
9 | 2 | ABCD | 2010-10-1 | 08:10 |
10 | 2 | ABCD | 2010-10-1 | 12:10 |
11 | 2 | ABCD | 2010-10-1 | 14:25 |
12 | 2 | ABCD | 2010-10-1 | 17:36 |
---------------------------------------------------------------
现在我想一个比较慢的办法就是通过ACCESS查询语句得到如下
id | 编号 | 姓名 | 日期 | 时间 | 备注
------------------------------------------------------------------
1 | 1 | ABC | 2010-10-1 | 08:15 | 1
2 | 1 | ABC | 2010-10-1 | 12:00 | 2
3 | 1 | ABC | 2010-10-1 | 14:20 | 3
4 | 1 | ABC | 2010-10-1 | 17:30 | 4
5 | 1 | ABC | 2010-10-2 | 08:13 | 1
6 | 1 | ABC | 2010-10-2 | 12:11 | 2
7 | 1 | ABC | 2010-10-2 | 14:22 | 3
8 | 1 | ABC | 2010-10-2 | 17:35 | 4
9 | 2 | ABCD | 2010-10-1 | 08:10 | 1
10 | 2 | ABCD | 2010-10-1 | 12:10 | 2
11 | 2 | ABCD | 2010-10-1 | 14:25 | 3
12 | 2 | ABCD | 2010-10-1 | 17:36 | 4
---------------------------------------------------------------
也就是说,当我符合编号、姓名和日期相同时就后面自动编号从1开始。
select 编号、 姓名 、日期、时间 from [表] group by 编号、姓名、日期。
请问怎样可以达到。
请问有没有更好的办法,谢谢!(注:在ACCESS2003数据库里直接建查询和交叉表)
语句一:(查询)
SELECT id, 编号,姓名 日期, "时间" & dCount("时间","表1","时间<= #" & [时间] & "# and 日期 = #" & [日期] & "# and ID=" & [ID] & "") AS 时间段, 时间
FROM 表1
GROUP BY id, 编号,姓名 日期, "时间" & dCount("时间","表1","时间<= #" & [时间] & "# and 日期 = #" & [日期] & "# and ID=" & [ID] & ""),时间
order by id, 编号,姓名 日期,时间
语句二:(交叉表)
TRANSFORM First(表1查询.时间) AS 时间之第一条记录
SELECT 表1查询.ID,表1查询.编号,表1查询.姓名,表1查询.日期,表1查询.时间
FROM 表1查询
GROUP BY 表1查询.ID,表1查询.编号,表1查询.姓名,表1查询.日期,表1查询.时间
PIVOT 表1查询.时间段;