0

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

4

5 回答 5

1

我建议将工作表链接到访问权限中,或者将工作表作为表格导入。

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

于 2009-11-09T21:28:27.897 回答
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 不支持VIEWs,所以您必须将该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:)

于 2009-11-10T09:15:05.667 回答
0

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

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

我不确定这是否是您正在寻找的内容:您的问题是关于 excel,但您已用 SQL 对其进行了标记。

于 2009-11-09T21:26:45.740 回答
0

如果您可以在一个查询中使用所有表,则可以使用 aunion来获取不同的行:

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 是标识记录的唯一字段。)

于 2009-11-09T21:31:13.937 回答
0

连接是通过匹配对应列中的值来组合两个表。结果,您将获得一个合并表,其中包含第一个表以及从第二个表复制的匹配行。您可以将DIGBD加载项用于 excel

于 2015-09-03T09:32:34.250 回答