设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3628|回复: 15
打印 上一主题 下一主题

[查询] 如何实现这种查询功能

[复制链接]
跳转到指定楼层
1#
发表于 2018-8-23 17:53:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如附件,有三张表,我需要做出一个查询把所有人三张表信息都显示出来,而不是象附件这样只显示一条记录
有用联合查询,还是只显示一个人的信息,而不是所有人的记录

请高手帮助,谢谢!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2018-8-24 10:28:06 | 只看该作者
修改表关系如下:

此外,个人建议把另外两张表的员工编号的索引属性改为“索引(有重复)”。——事实上,我并不明白,这两个表的序号用来干吗的。为什么非要和另外2张表建立关系。或者这样说吧,这几张表的序号指代的都是同一个对象么?
——按我理解,基础信息表的序号,应该员工信息的序号;培训记录的序号,应该是培训信息的序号;两者应该分属不同的东西。
——我可能比较笨吧,对这么复杂的表关系,有着不可逾越的认知障碍。
——最后,我创建了一个我认为比较好的查询供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2018-8-24 11:24:41 | 只看该作者
谢谢大神,学习一下看自己能不能懂
4#
 楼主| 发表于 2018-8-24 11:25:54 | 只看该作者
结果是我想要的,再次感谢
5#
 楼主| 发表于 2018-8-29 14:54:56 | 只看该作者
roych 发表于 2018-8-24 10:28
修改表关系如下:

此外,个人建议把另外两张表的员工编号的索引属性改为“索引(有重复)”。——事实上 ...

版主,接着上面这个数据表,有以下疑问,就是在此基础上做了条件查询,按姓名模糊查询时可以实现没条件显示全部数据,有条件按条件显示,但是当按“奖惩类型”来查询时,只显示了有“奖惩类型”的数据,结果直接显示,无需进行查询。我百度过后,有人提出是因为LIKE只能查询非空值的结果,有空值的无法查询,请问“奖惩类型”要按“姓名”一样,无条件显示全部有条件显示值,这个查询条件改如何写或者改,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
发表于 2018-8-30 09:41:20 | 只看该作者
wuhongzhou 发表于 2018-8-29 14:54
版主,接着上面这个数据表,有以下疑问,就是在此基础上做了条件查询,按姓名模糊查询时可以实现没条件显 ...

先说说like子句。
奖惩.奖惩类型 Like IIf(IsNull([Forms]![窗体1]![jc]),"*",[Forms]![窗体1]![jc])
这个子句的意思是说,如果是空的时候,窗体1的jc没有输入时,条件相当于:
奖惩.奖惩类型 like "*"
有录入时,相当于:
奖惩.奖惩类型 like [Forms]![窗体1]![jc]
后半句就不说了,很容易理解,由于没有通配符(*号),所以这里的like相当于“=”。
现在来看前半句,like "*"表示什么?我们知道,“*”表示任意字符。——因此,只要有录入的都会显示。——现在问题来了,没录入的是Null(空值),自然就无法显示出来了。
接下来说解决办法:
1、补齐空值或者设置必填字段为查询条件。例如,设置默认值为“--”——事实上,这个方法是最常用了。例如,查询员工信息时,通常会设置入职日期(必填)、工号(必填)等等。
2、修改SQL子句。这时候就需要使用VBA了,先判断是否有录入,如果有录入,则设置QueryDef的SQL子句加上where部分。如果没有录入,则只使用原先的子句。——这个等你学完VBA再回头看吧。
7#
 楼主| 发表于 2018-8-30 11:03:32 | 只看该作者
谢谢指导,我慢慢学习

点评

请留意:http://www.office-cn.net/thread-124770-1-1.html  发表于 2018-8-31 12:12
8#
 楼主| 发表于 2018-9-5 09:50:23 | 只看该作者
roych 发表于 2018-8-30 09:41
先说说like子句。
奖惩.奖惩类型 Like IIf(IsNull([Forms]![窗体1]![jc]),"*",[Forms]![窗体1]![jc])
...

你好,请在表格有两个与时间相关的字段,一个是入职时间,一个是离职时间,因为每个人都有入职时间所有没有空值,按附件中查询可以执行,但不可能所有人都是离职,所以在职的人用1900-1-1这个日期来填充,避免空值,同样按入职的查询执行,发现执行不了,要么只显示所有离职的,要么只能显示在某个时间段在职的人中挑出离职的人,不能直接按时间段来查询什么时间到什么时间有多少人离职,请问该如何修改,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
发表于 2018-9-5 10:24:00 | 只看该作者
没离职的也给一个离职日期1900-1-1?根据我个人的经验,建议进行以下操作:
1、离职记录应该单独列一张表,用来查询离职信息。在离职新增记录,并增加该员工的入职日期(根据你的问题描述,应该增加这个字段)。
2、入职记录作为一张表,可以考虑加一个“是否离职”的是否字段。默认该字段为“否”,离职时更新为“是”。
完成了这两步操作之后,接下来就可以回答上述问题了:
1、查询某个时间段离职人数——离职表
2、查询某个时间段在职人数——入职表
3、查询某个时间段入职人数和该时间段离职人数,——以入职表为左表,离职表为右表,包含该时间段所有入职表的工号和包含该时间段离职表的工号,建立关系。右表工号为null则表示该时间节点仍在职,非空则表示该阶段已经离职。写法大体如下:
  1. select 员工表.员工 as 在职员工, 离职表.员工 as 离职员工 from 员工表 left join 离职表 on 在职员工.工号= 离职表.工号 where 在职表.在职日期 between #2018-08-01# and #2018-09-01# and 离职表.离职日期 between #2018-08-01# and #2018-09-01#
复制代码

……最后,我还是多嘴说一句,多花点时间去了解业务吧。否则你这个系统修修补补几个月都未必能用。
10#
 楼主| 发表于 2018-9-5 13:41:19 | 只看该作者
roych 发表于 2018-9-5 10:24
没离职的也给一个离职日期1900-1-1?根据我个人的经验,建议进行以下操作:
1、离职记录应该单独列一张表 ...

谢谢,ACCESS只是自学的,以前没学过,部份功能对目前工作有一些帮助,所以很多东西不懂,到没说一定做出一个系统来,还差的太远,慢慢积累
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-8 08:14 , Processed in 0.113581 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表