以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  子表数据查询问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=146333)

--  作者:wyqwyq1981
--  发布时间:2020/2/21 16:28:00
--  子表数据查询问题
人事信息数据库,父表是基本情况表,子表是学历表,一个人可能对应有多个学历,现在想查询出每天人的最高学历和原始学历,如何实现?

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
直接查询会把每个人的所有学历都列出来,这样不符合要求。
[此贴子已经被作者于2020/2/21 16:35:24编辑过]

--  作者:有点蓝
--  发布时间:2020/2/21 17:00:00
--  
父表要放到左边,连接方式需要使用左连接。另外如果做分组处理。具体请上传实例说明
--  作者:wyqwyq1981
--  发布时间:2020/2/22 23:17:00
--  
请问老师怎样上传实例呀,程序400M,传不上去呀

[此贴子已经被作者于2020/2/22 23:17:48编辑过]

--  作者:sloyy
--  发布时间:2020/2/23 0:54:00
--  
你指望计算机认识中文学历的高低?不现实吧,你首先要把学历按照从小到大编一个对照表,比如
编号 学历
1     小学 
2     初中 
3     高中 
4    中专 
5    大专 
6   本科 
7   硕士
8   博士
然后 才能分组查询  姓名 ,最低学历,最高学历  


--  作者:wyqwyq1981
--  发布时间:2020/2/23 9:28:00
--  
应该可以吧,在ACCESS中就可以分组查询,查询子表的第一条记录first或最后一条记录last,因为每个人的学历录入时最先录入的就是原始学历,最后一条录入的就是最高的学历,在录入每个人的学历时遵循这个顺序就可以的。
--  作者:sloyy
--  发布时间:2020/2/23 12:27:00
--  
你考虑过增加,删除,修改学历后会发生什么事情吗?
--  作者:有点蓝
--  发布时间:2020/2/23 21:09:00
--  
录入未必是按顺序的,比如录入到大专了,发现少录了高中,就补录,这时最后一条记录就可能是高中了,而不是大专。难道您会把所有记录删除,,重新按照顺序再录一遍?

上传程序不需要上传全部的,新建一个项目,导入相关表的部分测试数据(比如一两个人的全部关联数据),把这个新项目发上来即可

--  作者:wyqwyq1981
--  发布时间:2020/2/24 21:46:00
--  
谢谢老师们的指点,我想建立一个能记录人员各方面详细信息的数据库,例如学历、职称等,主表为基本表存放一些人员基本信息,子表为其他详细信息,例如学历、职称、职务、家庭信息等,主表与子表均为一对多的关系,用人员编号关联,但发现查询或统计数据是有点麻烦。我建立了一个例子,请各位老师指点一下,
1、如何同时查询每个人的最高学历和最高职称
2、有时有特殊需求,需要查询出每个人的原始学历
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:人事管理系统例子.rar

[此贴子已经被作者于2020/2/24 21:49:14编辑过]

--  作者:有点蓝
--  发布时间:2020/2/24 22:49:00
--  
如果要一次显示只能通过SQL处理,附件里新增看一个查询表
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.zip


如果是SqlServer数据库,SQL可以改为

Select a.人员编号,姓名,性别,政治面貌,学历 as 最高学历,专业,毕业院校,毕业日期,职称等级 as 最高职称等级,职称系列,获得资格时间 from {基本情况表} As a left join 
(Select a.人员编号,学历,专业,毕业院校,毕业日期 from {学历} As a Inner join (Select 人员编号,max(毕业日期) As 毕业日期 from {学历} group by 人员编号) As b on a.人员编号=b.人员编号 and a.毕业日期=b.毕业日期) As c on a.人员编号=c.人员编号
left join  (Select a.人员编号,职称等级,职称系列,获得资格时间 from {职称表} As a Inner join (Select 人员编号,max(获得资格时间) As 获得资格时间 from {职称表} group by 人员编号) As b on a.人员编号=b.人员编号 and a.获得资格时间=b.获得资格时间) As d on a.人员编号=d.人员编号

如果要查原始学历,把sql里的max改为min即可

--  作者:wyqwyq1981
--  发布时间:2020/2/28 19:44:00
--  
老师帮忙看看语句哪里有问题?
图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2020/2/28 19:43:51编辑过]