MS Access将2个表合并为1,没有空格

时间:2013-11-14 14:50:11

标签: database ms-access merge ms-access-2013

我有一个难题。我的数据库中有2个表,数据来自在某些程序中分配给学生的笔记本电脑:

表1具有以下信息:Model,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系统给我提供我需要的东西,但我必须小心我的数据。

随着我越来越近,我会不断更新。

1 个答案:

答案 0 :(得分:0)

您熟悉UNION查询吗?这对你来说可能是最简单的方法。这不是一个真正的答案,但我还不能发表评论,所以这就是我所拥有的。基本上,您创建两个查询(最好)相同数量的相同数据列,但每个查询可以有不同的标准;如 选择StudentID,AssetTag来自Table1 Inner Join Table2 On Table1.StudentID = Table2.StudentID 联盟 选择Table2.StudentID,Table1.AssetTag From Table2 Left Join Table1 On Table2.StudentID = Table1.StudentID Where Table1.StudentID为null

不确定这是100%准确,但希望你能得到这个想法。创建两个查询,匹配列,并在SQL视图中使用单词“UNION”

将它们连接起来

以下是您提供的数据结构中的联盟:

选择tble1.Model,tble1.Site_ID,tble1.SiteName,tble1.ServiceTag,tble1.AssetTag,tble1.Floor,tble1.Room,tble1.FirstName,tble1.LastName,tble1.StudentID,tble1.Grade FROM tble1 INNER JOIN tble2 ON tble1.StudentID = tble2.StudentID; 联盟 选择tble1.Model,tble1.Site_ID,tble1.SiteName,tble1.ServiceTag,tble1.AssetTag,tble1.Floor,tble1.Room,tble2.FirstName,tble2.LastName,tble2.StudentID,tble2.Grade FROM tble1 RIGHT JOIN tble2 ON tble1.StudentID = tble2.StudentID WHERE(((tble1.StudentID)为空));

为了接近我担心你需要手动输入。遗憾。