如何在SQL中连接Excel中的两个工作表?


121

我有两个不同的Excel文件中的两个工作表。它们都包含名称,ID号和相关数据的列表。一个是包含一般人口统计字段的主列表,另一个是仅包含名称和ID以及地址的列表。这个清单是由另一个办公室从主清单中削减的。

我想使用第二个列表来过滤第一个。此外,我希望结果包括主工作表中的其他字段以及第二个工作表中的地址字段。我知道如何使用数据库内连接很容易地做到这一点,但我不清楚如何在Excel中有效地执行此操作。如何在Excel中加入两个工作表?显示如何进行外连接的奖励点,我更希望知道如何在不需要宏的情况下执行此操作。


1
我发现以下页面非常有用:randomwok.com/excel/how-to-use-index-match
Tommy Bravo

randomwok.com/excel/how-to-use-index-match =>特别是最后的简单“提醒”:=INDEX ( Column_I_want_a_return_value_from , ( MATCH ( My_Lookup_Value , Column_I_want_to_Lookup_against , 0 ))
Tommy Bravo

Answers:


156

对于2007+使用Data> From Other Sources> From Microsoft Query

  1. 选择Excel File并选择你的第一个excel
  2. 选择列
    (如果没有看到任何列列表,请务必检查Options> System Tables
  3. Data> Connections> [选择刚才创建的连接]> Properties> Definition>Command text

您现在可以将其编辑Command text为SQL。不确定支持什么语法,但我尝试了隐式连接,“内连接”,“左连接”和所有工作的联合。这是一个示例查询:

SELECT *
FROM `C:\Users\Peter\Documents\Excel-to-excel\Source_1.xlsx`.`Sheet1$` a
LEFT JOIN `C:\Users\Peter\Documents\Excel-to-excel\Source_2.xlsx`.`Sheet1$` b
ON a.col2 = b.col2

1
有没有办法避免硬编码路径?相对路径会起作用吗?
Rekin

25
作为额外的好处,Microsoft Query允许您体验16位样式的通用控件,用于打开Excel文件和消息框。这样你就可以记得你年轻的时候。:-)
Edward Brey

这适用于CSV文件吗?我正在使用MS Office Professional Plus 2010并且看不到如何执行第3步 - 我是否将步骤2中的对话框挂起?在我的“连接”对话框中没有“选择新连接”。
约翰·弗里曼

@JohnFreeman,因为你必须根据你的需要选择一个可用的选项(例如'Add ...')
Aprillion

3
请注意,您可能会出现一个对话框,指出“此数据源不包含可见表”,然后是“查询向导 - 选择列”对话框。您可以在对话框中单击“选项”按钮,然后选中“系统表”复选框以查看要查询的数据。
Tola Odejayi 2016年

11

支持接受的答案。我只想强调“选择列(如果没有看到任何列列表,请务必选中选项>系统表)”

选择excel文件后,很可能会看到this data source contains no visible tables提示,可用的选项卡和列都是none。Microsoft 承认这是一个错误 ,excel文件中的选项卡被视为“系统表”,默认情况下不选择“系统表”选项。所以不要在这一步恐慌,你只需要点击“选项”并选中“系统表”,然后就会看到可用的列。


8

VLOOKUP和HLOOKUP可用于搜索匹配的主键(垂直或水平存储)并从“属性”列/行返回值。


对同一工作簿上的工作表非常有用(但我发现INDEX + MATCH函数更有用),从封闭的外部工作簿更新数据时稍微复杂一点......
Aprillion

7

您可以使用Microsoft Power Query,可用于较新版本的Excel(类似于已接受的答案,但更简单,更简单)。Power Query调用join'merges'。

最简单的方法是将2张Excel表格作为Excel表格。然后在Excel中,转到Power Query功能区选项卡,然后单击“从Excel”按钮。将两个表导入Power Query后,选择一个并单击“合并”。


3
比任何其他提议的选项都容易得多。这应该是答案!Power Query现在包含在Excel 2016的Data选项卡下。
SliverNinja - MSFT

1
另一个功能似乎不存在于Mac😕
juandesant 2017年

4

虽然我认为Aprillion使用Microsoft Query的答案非常好,但它激发了我使用Microsoft Access加入我发现的数据表更容易。

您当然需要安装MS Access。

脚步:

  • 创建一个新的Access数据库(或使用临时数据库)。
  • 使用Get External Data导入Excel数据作为新表。
  • 使用Relationships显示您如何联接表。
  • 设置关系类型以匹配您想要的(表示左连接等)
  • 创建一个连接表的新查询。
  • 使用External Data->Export to Excel产生的结果。

没有Aprillion的好回答,我真的不可能做到这一点。


我从来没有在今天之前使用过,但这只花了我10分钟。我将excel列复制/粘贴到2个表中而不是导入。
jiggunjer

3

您无法在Excel中对Excel表格执行SQL样式连接。也就是说,有多种方法可以完成你想要做的事情。

在Excel中,就像Reuben所说的那样,可能效果最好的公式是VLOOKUPHLOOKUP。在这两种情况下,您匹配一个唯一的行,并从找到的ID返回给定列\行的值到左\下。

如果您只想在第二个列表中添加一些额外的字段,请将公式添加到第二个列表中。如果需要“外连接”样式表,则将VLOOKUP公式添加到第一个列表中,ISNA以测试是否找到了查找。如果Excel的帮助没有为您提供有关如何在特定实例中使用这些内容的详细信息,请告诉我们。

如果您更喜欢使用SQL,则将数据链接到数据库程序,创建查询,然后将结果导出回Excel。(在Access中,您可以将Excel工作表或命名范围作为链接表导入。)


12
实际上,你可以 - 它被称为微软查询
4

3

在XLTools.net,我们为MS Query创建了一个很好的替代方案,尤其是针对Excel表的SQL查询。它被称为XLTools SQL查询。它比MS Query更容易使用,如果你只需要创建和运行SQL就可以很好地工作 - 没有VBA,没有MS Query的复杂操作......

使用此工具,您可以使用嵌入式SQL编辑器对Excel工作簿中的表创建任何SQL查询,并立即运行它,并将结果放在新工作表或任何现有工作表上。

您可以使用几乎任何类型的连接,包括LEFT OUTER JOIN(不支持RIGHT OUTER JOIN和FULL OUTER JOIN)。

这是一个例子:

XLTools SQL查询 - 查询生成器


2

对于Excel 2007用户:数据>来自其他来源>来自Microsoft Query>浏览到Excel文件

根据这篇文章,从XLS版本2003查询可能会导致“此数据源不包含可见的表”。错误,因为您的工作表被视为SYSTEM表。因此,在创建查询时,请检查“查询向导 - 选择列”对话框中的“系统表”选项是否有效。

要定义连接:Microsoft Query对话框>表格菜单>连接...

要将数据返回到原始Excel工作表,请从“Microsoft查询”对话框>“文件”菜单中选择“将数据返回到Excel工作表”。


0

如果您对数据库足够熟悉,可以使用SQL Server将两个工作表连接为链接服务器,然后使用T-SQL进行后端数据工作。然后通过将Excel连接回SQL并将数据拉入表(常规或透视)来完成。您也可以考虑使用Powerpivot; 它将允许任何数据库源之间的连接 - 包括用作平面数据库的Excel。


2
你是对的,但最初的问题是基于使用电子表格(或两个)来执行数据库功能,所以我不确定任何真正有效的方法来完成任务。
dav

0

寻找同样的问题我遇到了RDBMerge,我认为这是一种用户友好的方式将数据从多个Excel工作簿,csv和xml文件合并到一个摘要工作簿中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.