2009-11-09 38 views
0

我有大约20个包含数据的excel文件。所有的表都有相同的列,如ID名称年龄位置等.....每个文件都有不同的数据,但我不知道一个文件中的数据是否在另一个文件中再次重复。所以我想加入所有的文件,并且结果st应该包含不同的值。请尽快帮我解决这个问题。我希望结果集存储在访问数据库中。如何加入两个或多个表格和具有所有不同值的结果集

回答

0

在SQL中,可以使用JOIN或NATURAL JOIN来连接表。我会研究NATURAL JOIN,因为你说所有的表都有相同的值。

之后,您可以使用DISTINCT获取不同的值。

虽然我不确定这是不是你想要的东西:你的问题是关于excel的问题,但是你用SQL标记了它。

1

我会推荐链接在acces床单,或导入床单作为tabels。

然后从那里尝试使用DISTINCT确定从表格/工作表中选择需要的键,并且只根据需要选择记录。

+0

感谢您的答复,但我在看的是我想要从两个文件中的所有数据不重复。我的意思是 ID名称LOC 1高保真 2 B胡 3 c。通过 ID名称LOC 1 d XY 2 B胡 3小时BJ 我想 ID名称LOC 1一喜 2 b胡 3 c。通过 4 d XY 5小时BJ – abhi 2009-11-09 22:21:21

0

如果你可以使用一个查询所有的表,你可以使用一个union来获得不同的行:

select id, name, age, location from Table1 
union 
select id, name, age, location from Table2 
union 
select id, name, age, location from Table3 
union 
... 

您可以直接从结果插入记录:

insert into ResultTable 
select id, name, age, location from Table1 
union 
.... 

如果您一次只能从一个表格中进行选择,则可以跳过插入已在表格中的行:

insert into ResultTable 
select t.id, t.name, t.age, t.location from Table1 as t 
left join ResultTable as r on r.id = t.id 
where r.id is null 

(假设ID是一个独特的字段,识别记录。)

+0

嗨,大家好感谢您的支持,但是这是我有 问题,我有20个Excel文件。每个文件都包含不同的数据,所以如果我们在表上做任何操作,就没有问题了。但是,如果我尝试做工会与其他表则显示出这样的 ID名称的位置等等等等.... 1 XYZ BHU 1个ABC HUD 2 BHK – abhi 2009-11-09 22:16:28

+0

感谢您的答复,但我在寻找什么是我想要来自两个文件的所有数据都没有重复。我的意思是 ID名称LOC 1高保真 2 B胡 3 c。通过 ID名称LOC 1 d XY 2 B胡 3小时BJ 我想 ID名称LOC 1一喜 2 b hu 3 c作者: 4天xy 5小时bj – abhi 2009-11-09 22:38:53

+0

如果我理解你是正确的(在多次阅读你的评论之后),你应该完全省略Excel文件中的id,以便记录在剩下的数据,并在Access数据库中有一个计数器字段,用于创建新的id:s当你添加它们时。 – Guffa 2009-11-10 00:00:07

0

看来你想要的唯一一组数据是这样的:

SELECT T1.name, T1.loc 
    FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
     ].[Sheet1$] AS T1 
UNION 
SELECT T1.name, T1.loc 
    FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
     ].[Sheet1$] AS T1 

...但你那么想任意应用整数序列为id(而不是使用Excel表中的id值)。

由于Access数据库引擎不支持通用表表达式和Excel不支持VIEW S,你将不得不重复UNION查询作为派生表(希望优化器将识别重复?)例如使用相关子查询来获得行号:

SELECT (
     SELECT COUNT(*) + 1 
      FROM (
       SELECT T1.name, T1.loc 
        FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
         ].[Sheet1$] AS T1 
       UNION 
       SELECT T1.name, T1.loc 
        FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
         ].[Sheet1$] AS T1 
       ) AS DT1 
     WHERE DT1.name < DT2.name 
     ) AS id, 
     DT2.name, DT2.loc 
    FROM (
     SELECT T2.name, T2.loc 
      FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
       ].[Sheet1$] AS T2 
     UNION 
     SELECT T2.name, T2.loc 
      FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
       ].[Sheet1$] AS T2 
     ) AS DT2; 

注:

我想要的结果集存储在 访问数据库

那么也许你应该迁移Excel数据放入Access数据库中的临时表中,并从那里进行数据清理。至少你可以把派生表放入一个VIEW :)

+0

我认为这个答案是有误导性的,这个问题意味着WHOLE行可能在多个文件中 - 包括ID,为什么他需要申请新的身份证号码! – HarveyFrench 2015-09-03 10:15:36

0

联接是通过匹配相应列中的值来组合两个表。结果,你将得到一个由第一个表格组成的合并表格,再加上从第二个表格复制的匹配行。您可以使用DIGBD加载项为Excel

相关问题