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