【问题标题】: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 技术来执行它。像联接表之类的东西?但是连接表只连接不同表中的列。现在我想连接行*

【问题讨论】:

标签: sql vba excel ado


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多