合并两张表中的数据以形成聚合输出(类似于数据库外连接)

Posted

技术标签:

【中文标题】合并两张表中的数据以形成聚合输出(类似于数据库外连接)【英文标题】:Combine data from two sheets to form conglomerated output (similar to database outer join) 【发布时间】:2015-12-30 22:50:12 【问题描述】:

假设我有一个 Excel 工作簿 (.xlsx / .xlsm),其中包含以下两个工作表(为了举例而进行了简化):

表 1:

Student_Id:    Name:    Age:    Sex:     ...
1              Bobby    10      Male     ...
2              Suzy     11      Female   ...
3              Mike     10      Male     ...
4              Sally    9       Female   ...
 ....

表 2:

Class:    Student_Id:
Math      1
Math      2
Math      4
English   3
English   4 
 ....

现在,我想创建一个混合了两者的输出表,看起来类似于:

输出:

Class:    Name:    Age:    Sex:     ...
Math      Bobby    10      Male     ...
Math      Suzy     11      Female   ...
Math      Sally    9       Female   ...
English   Mike     10      Male     ...
English   Sally    9       Female   ...
 ....

现在,我知道使用 VLOOKUPs 和 INDEXMATCH 函数很容易做到这一点,我已经做到了,但我的问题是 Excel 中是否存在更好的功能来实现这一点.

我正在考虑只使用 ADO 来查询两张表并将其输出,但我只是觉得必须有更好的方法/内置功能。

补充说明:

    我的数据不需要实时 - 这意味着它不需要是会减慢 Excel 速度的公式 - 我知道我可以使用复制/选择性粘贴、值来做到这一点。

    我知道 Power Query,但我尽量不使用需要我的用户安装加载项的东西(但工作簿中的宏可以)。

【问题讨论】:

如果您不需要Excel的公式,为什么不直接使用数据库,例如MS Access?否则你也可以试试Run SQL on an Excel table (sheet)。 我可以向您展示我将如何使用记录集读取所有数据,但我不知道这是否比使用 VLookups & Index、Match 函数或做一些技巧更好工作表的查询。 @agold,我完全同意,只是用户想要 Excel 中的数据,这是我给定的限制。 @MatthewD,非常感谢。我知道如何使用记录集来做到这一点,并且可能会这样做,这让我感到奇怪的是 Excel 没有使用 Data / ListObject 类库在某处内置它......我只是想知道是否有是一个 Excel 功能,我不知道它是否可以更智能地做到这一点。 【参考方案1】:

这可以通过 Excel 的内置功能轻松完成。它被称为Microsoft Query

可以在功能区上的Data - Other Sources - From Microsoft Query 下找到。

您从看起来很古老的对话框中选择您的工作簿(它可以是同一个工作簿)。

它会抱怨找不到任何表,单击确定。然后从对话框中进入选项并选中系统表框。您现在可以从两个源表中选择所需的列。您可以像这样在查询构建器中加入它们:

现在从“文件”菜单中选择Return Data to Microsoft Excel

将显示一个导入数据对话框,让您可以选择新数据表的显示位置。

如果需要,您甚至可以将属性设置为定期刷新。

注意:此解决方案不需要 VBA 和工作表公式。它根据您在 Microsoft Query(它是 Excel 的内置组件)中创建的 SQL 生成连接表。结果表可以是静态的或动态的。

【讨论】:

只是诗意,@Hero!!! - 花了一些时间,但以最美丽的方式做了我想要的! - 非常感谢!!! 不客气。这很有趣......这一直存在于 Excel 中,大多数人从未发现它。它隐藏得很好。 同意! - 一旦我将它移入 VBA 并开始直接使用 SQL 文本,该死的正是我想要的! - 真的,谢谢!!

以上是关于合并两张表中的数据以形成聚合输出(类似于数据库外连接)的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE中 2张类似表进行数据对比,并把值放到另一张表里面进行显示

SQL 两张表合并 (两张表的列都相同)

SQL关联两张表查数据,结果只显示一条。

SQL关联两张表查数据,结果只显示一条。

MySQL如何同时删除主外键关联的两张表中的数据

如何用SQL语句查询两张表中的相同字段数据