如何合并来自不同表的记录?
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/…以上是关于如何合并来自不同表的记录?的主要内容,如果未能解决你的问题,请参考以下文章