我有大约 20 个包含数据的 excel 文件。所有表都有相同的列,如 id 名称年龄位置等.....每个文件都有不同的数据,但我不知道一个文件中的数据是否再次在另一个文件中重复。所以我想加入所有文件,结果 st 应该包含不同的值。请尽快帮我解决这个问题。我希望将结果集存储在访问数据库中。
5 回答
我建议将工作表链接到访问权限中,或者将工作表作为表格导入。
然后从那里尝试使用 DISTINCT 从表/工作表中选择所需的键,并仅根据需要选择记录。
您想要的唯一数据集似乎是:
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
:)
在 SQL 中,您可以使用 JOIN 或 NATURAL JOIN 来连接表。我会研究 NATURAL JOIN ,因为您说所有表都具有相同的值。
之后,您可以使用 DISTINCT 来获取不同的值。
我不确定这是否是您正在寻找的内容:您的问题是关于 excel,但您已用 SQL 对其进行了标记。
如果您可以在一个查询中使用所有表,则可以使用 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 是标识记录的唯一字段。)
连接是通过匹配对应列中的值来组合两个表。结果,您将获得一个合并表,其中包含第一个表以及从第二个表复制的匹配行。您可以将DIGBD加载项用于 excel