当前位置:数据库 > Access >>

ACCESS数据库查询语句问题,求助!

本人新手,做了个指纹考勤系统玩玩,数据库用的ACCESS,现在运行良好,但统计的时候出问题了 数据库结构: 【Employees】员工信息表 【E_ID】编号 【E_Name】姓名 1 张三 2 李四 3 王五 ------------------------------------ 【Records】考勤记录表 【R_ID】编号 【R_EID】员工 【R_Time】时间 1 张三 2011-5-20 12:00:00 2 李四 2011-5-20 11:00:00 ----------------------------------------------- 以上是表结构及内容,我想查看考勤记录,sql语句如下: select a.R_ID,b.E_Name,a.R_Time from Records a,Employees b where a.R_EID=b.E_ID 这样就把有的考勤记录查出来了,但是我想查看每个人的考勤记录,不光光是考过勤的张三和李四,王五虽然没考勤,但是我也想把他查出来,哪怕后面的数据是空的。 以前做Sql Server数据库的时候,把上面的sql语句的表顺序颠倒一下,就可以按员工表为优先把所有人都查出来,但access不行,就算可以,如果数据量很大、每个人每天都有好几次考勤记录的时候,也会出现问题。 言归正传,我想实现的目的就是:把考勤记录表中的所有信息按照员工表的数据分组显示,没考勤的人也显示出来,而且是每天为一个分隔,希望高手指教! 万分感激!
追问:你好!你的语句报错啊!谢谢你!你的语句我试了可以!感谢!
但是我又发现一个问题,如果有人只签到没签退,或者只签退没签到,人数多不认真看的时候,会漏掉!能不能再加一个按‘类型’分组,分为签到和签退两种类型,每人都要显示出来,这样即使有人漏签了,我的报表里也可以明显的看到空白!谢谢!
这样的话,考勤记录表要加一列‘R_Type’,如下
【Records】考勤记录表
【R_ID】编号 【R_EID】员工 【R_Time】时间     【R_Type】类型不行啊,没有效果,没能实现按考勤类型分组我的打卡机其实就是指纹仪,所有操作都是软件完成,软件中有2个时间,一个是上班时间,一个是下班时间,通过比对来判断是否迟到或早退!
我要的效果是这样:
日期 类型 姓名 状态 时间
2011-5-5 签到 张三 正常 2011-5-5 08:40:00
2011-5-5 签退 张三 正常 2011-5-5 17:30:00
2011-5-5 签到 李四 正常 2011-5-5 08:40:00
2011-5-5 签退 李四 (没签退,显示空白)真是谢谢你!能不能加你下?Q。。。
答案:考勤表的R_EID 应该使用员工代号而不是员工姓名,员工表应与考勤表通过员工代号建立一对多关系。员工表与考勤表采用左外连接,取考勤时间的日期部分,员工代号,考勤时间的时间部分排序ACCESS SQL 代码这样写:
SELECT RECORDS.R_ID,EMPLOYEES.E_NAME,RECORDS.R_TIME FROM EMPLOYEES  LEFT OUTER JOIN RECORDS ON EMPLOYEES.E_ID=RECORDS.R_EID ORDER BY DATEVALUE(RECORDS.R_TIME ),EMPLOYEES.E_ID,TIMEVALUE(RECORDS.R_TIME )
其他:试试做外连接
select a.R_ID,b.E_Name,a.R_Time from Records a left join Employees b where  a.R_EID=b.E_ID
这个是标准的sql语句,不知道在access好不好用。 你要的结果确实可以通过外连接来实现。
可是,这里还有个问题:
现在考勤记录表中也有员工姓名相关的字段,这时又为什么一定要去从员工信息表查询员工姓名呢?考勤记录表的R_EID字段意义不大吧。 

上一个:关于创建Access数据库的数据源中的创建系统dsn怎么创建?
下一个:急求!!access数据库作业,除了销售系统和图书系统,其他什么内容都可以

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,