【发布时间】:2013-11-14 14:50:11
【问题描述】:
我有一个很难回答的问题。我的数据库中有 2 个表,数据来自某些程序中分配给学生的笔记本电脑:
表 1 包含以下信息:型号、SiteID、SiteName、ServiceTag、AssetTag、Floor、Room、FirstName、LastName、STUDENTID、Grade
表 2 包含以下信息:SiteID、SiteName、LastName、FirstName、Grade、STUDENTID
表 1 包含来自去年名册的数据,包括学生及其分配的计算机。表 2 列出了该计划中的新学生名单。表 2 中的一些学生与表 1 中的学生相匹配(仍在该计划中的学生),但也有一些不匹配。
我需要执行以下操作:获取表 2 上的所有学生,并为他们分配一台机器,该机器已经在所述 SiteID(机器所在的学校),同时考虑到一些学生仍在计划中他们将相同的机器分配给他们,并在我需要为额外的学生部署新机器的地方留空。
我试图在此处插入图像以显示示例,但它不允许我这样做。如果您能帮助我,我很乐意通过电子邮件向您发送一个包含数据的基本示例。
编辑 1:
到目前为止,我能够得到一个查询,将仍在程序中的学生还给我,并给他们最初分配的机器,但其他机器没有分配给他们的学生,我试图弄清楚如何填写其他机器的数据与新生的名字。请记住,我正在处理多所学校,并且机器无法从一所学校转移到另一所学校,如果新名册中的学生比以前更多,那么我将不得不让这些学生没有分配给他们的机器并部署新系统。
编辑 2:
下面是表格的 CSV 版本以及我想要得到的结果。
TABLE 1
MODEL,SITE_ID,SITENAME,SERVICETAG,ASSETTAG,FLOOR,ROOM,FIRSTNAME,LASTNAME,STUDENTID,GRADE
6420,123,MY SCHOOL,1234GM1,AT0012345,1,102,PETER,PEREZ,100123456,1
6420,123,MY SCHOOL,5678GM1,AT0012346,1,102,PAUL,ANDREWS,100123457,1
6420,123,MY SCHOOL,1234FH1,AT0012347,1,102,JOHN,BERRONDO,100123458,3
6420,123,MY SCHOOL,5678FH1,AT0012348,1,102,ANDREW,JONES,100123459,3
6420,123,MY SCHOOL,12344K1,AT0012349,1,102,JONATHAN,DOE,100123460,4
TABLE 2
SITEID,SITENAME,FIRSTNAME,LASTNAME,STUDENTID,GRADE
123,MY SCHOOL,PAUL,ANDREWS,100123457,2
123,MY SCHOOL,JOHN,BERRONDO,100123458,4
123,MY SCHOOL,ANGEL,YOUNG,100123470,1
123,MY SCHOOL,TANIA,MATTHEWS,100123471,1
123,MY SCHOOL,GEORGE,PEREZ,100123472,2
123,MY SCHOOL,WALTER,DOE,100123473,2
123,MY SCHOOL,MATTHEW,PETERS,100123474,3
RESULTING TABLE
SITE ID,SITENAME,SERVICETAG,ASSETTAG,FIRSTNAME1,LASTNAME2,STUDENTID,GRADE
123,MY SCHOOL,5678GM1,AT0012346,PAUL,ANDREWS,100123457,2
123,MY SCHOOL,1234FH1,AT0012347,JOHN,BERRONDO,100123458,4
123,MY SCHOOL,1234GM1,AT0012345,ANGEL,YOUNG,100123470,1
123,MY SCHOOL,5678FH1,AT0012348,TANIA,MATTHEWS,100123471,1
123,MY SCHOOL,12344K1,AT0012349,GEORGE,PEREZ,100123472,2
123,MY SCHOOL,,,WALTER,DOE,100123473,2
123,MY SCHOOL,,,MATTHEW,PETERS,100123474,3
我尝试了以下 SQL 查询:
SELECT table2.SITEID, table2.SITENAME, table2.LASTNAME, table2.FIRSTNAME, table2.GRADE, table2.STUDENTID, table1.SERVICETAG, table1.ASSETTAG,
FROM
table2 LEFT JOIN table1 ON table2.STUDENTID=table1.STUDENTID;
此查询为我提供了名册上学生的完整列表,对于那些与他们保留机器的旧数据相匹配的学生,其余的留空。
SELECT table1.[SITEID], table1.[SITENAME], table1.[SERVICETAG], table1.[ASSETTAG]
FROM table1 LEFT JOIN [query 1] ON table1.[SERVICETAG] = [query 1].[SERVICETAG]
WHERE ((([query 1].[SERVICETAG]) Is Null));
这给了我尚未分配给新名单中任何学生的机器。
SELECT table2.SITEID, table2.SITENAME, table2.LASTNAME, table2.FIRSTNAME, table2.GRADE, table2.STUDENTID
FROM table2 LEFT JOIN table1 ON table2.STUDENTID= table1.STUDENTID
WHERE (((table1.STUDENTID) Is Null))
ORDER BY table2.SITEID;
这个给我没有匹配计算机的学生(换句话说,需要分配给他们的机器的学生)
如您所见,我拥有介于两者之间的所有内容,如果我最终能够加入这些数据并获得 CSV 结果演示中显示的结果,那就太好了。
更新 3:
我决定暂时采用 excel 方式,它变成了半自动半手动。我使用的 VLOOKUP 系统可以满足我的需求,但我必须小心我的数据。
我会随着距离越来越近而不断更新。
【问题讨论】:
-
不只是查询,难道不能直接使用 Make Table 来创建一个不包含现有学生的新表吗?
-
问题是我需要能够将学校中已有的机器分配给新的学生名册,并考虑到一些学生今年从以前的名册回来。
-
那么您是否只是想避免手动执行所有这些操作?因为我很确定您可以根据明年的列表查询包含重复出现的学生的表。然后制作另一个不出现重复学生的表格。之后合并这两个。这样一来,您就可以保留旧表格以备不时之需查找旧数据,并为每所学校每年创建一个新表格。
标签: database ms-access merge ms-access-2013