如何合并来自不同表的记录?

Posted

技术标签:

【中文标题】如何合并来自不同表的记录?【英文标题】:How to combine records from different tables? 【发布时间】:2016-07-19 07:45:24 【问题描述】:

同一工作簿中有两个工作表具有相同的结构-相同的字段名称。

例如:

表 1

- Officer  name   mkt 
 - s15     peter  15
 - s17     mary   18
 - S32     tom    42
 - S32     tom    89

表 2

- Officer  name   mkt 
 - s56     jason  55
 - s31     alex   34
 - S54     gee    45

现在我正在使用 ADO 在 excel-vba 中运行 sql。

select officer ,name ,sum(mkt) from [$table1]

现在我想将这 2 个表记录合并起来,稍后再选择。

这意味着:

表 3

- Officer  name   mkt 
 - s15     peter  15
 - s17     mary   18
 - S32     tom    42
 - S32     tom    89
 - s56     jason  55
 - s31     alex   34
 - S54     gee    45

然后再进行选择(SQL)。

  select officer ,name ,sum(mkt) from [$table3]

是否可以在 SQL 或 VBA 中执行(我更喜欢在 SQL 语句中执行)?

*我更喜欢使用某种 SQL 技术来执行它。像联接表之类的东西?但是连接表只连接不同表中的列。现在我想连接行*

【问题讨论】:

我认为你需要JOIN 子句... 见Combine 2 Excel tables into one appending the data?。 【参考方案1】:

您可以使用公用表表达式将表合并为一个,然后执行聚合求和。我正在使用 SET NOCOUNT ON; ,因为如果我省略了这个,我之前在 excel 中遇到了问题。两个表之间的完全外连接也可以。

SET NOCOUNT ON;

WITH CTE AS
(
    SELECT *
    FROM [$table1]
    UNION ALL
    SELECT *
    FROM [$table2]
)

SELECT office, name, sum(mkt)
FROM CTE
GROUP BY office, name

您也可以尝试不使用 CTE:

SELECT office, name, sum(mkt)
FROM(
    SELECT *
    FROM [$table1]
    UNION ALL
    SELECT *
    FROM [$table2]
)
GROUP BY office, name

【讨论】:

创建表 3 不是必须的。但我想表达我希望从两个表中获取 `officer,name,sum(mkt)` 并将结果显示在一个表中。但是有没有可能让它变短? 这种方法有效。您是否担心查询的字符过多? 是的。因为我的查询必须选择这么多字段。在每个字段名称上添加t3....... 非常困难。 好的,我编辑了答案,所以它不再使用 t3 别名 它不起作用。SET NOCOUNT ON;仅适用于 SQL Server(从 2008 年开始)、Azure SQL 数据库、Azure SQL 数据仓库。 WITH CTE AS( 也不工作。我正在使用带有 ADO 的 excel-vba,但不是 sql server【参考方案2】:
    select officer ,name ,sum(mkt) from table1
    union all
    select officer ,name ,sum(mkt) from table2

【讨论】:

也许您可以多解释一下这段代码对未来读者的作用? msdn.microsoft.com/en-us/library/…

以上是关于如何合并来自不同表的记录?的主要内容,如果未能解决你的问题,请参考以下文章

尝试合并来自两个不同表的两个选择时出现错误

教义 - 计算来自不同表的记录

MySQL中如何合并结构和记录数都不同的两个表?

创建来自两个不同系统的两个相同表的视图以仅返回唯一记录

如何合并两个不同的数据帧,时间戳略有不同

如何在java中合并来自两个不同数据库的两个不同结果集