合并具有不同记录数的两个表

Posted

技术标签:

【中文标题】合并具有不同记录数的两个表【英文标题】:Merging two tables with different numbers of records 【发布时间】:2017-10-28 17:58:03 【问题描述】:

我有两个要合并的表:

Table A

Site    Date      Time     Flow

xy-1    9/28/17   10:20    0.11

xy-1    8/13/17   9:59     

xy-1    7/30/17   9:38     0.15


Table B

Site    Date      Time     pH

xy-1    9/28/17   10:20    7.3

xy-1    8/27/17   10:30    7.8

xy-1    8/13/17   9:59     7.9

xy-1    7/30/17   9:38     7.2

我希望输出如下所示:

Site    Date      Time     pH   Flow

xy-1    9/28/17   10:20    7.3  0.11

xy-1    8/27/17   10:30    7.8

xy-1    8/13/17   9:59     7.9  

xy-1    7/30/17   9:38     7.2  0.15 

我尝试了各种连接,但由于两个表的记录数不同,连接过程中会省略行。寻找 SQL 语句、Excel 公式或 Matlab 代码。

我认为它需要某种比较站点 ID 和日期的 IF 语句。如果两个表中的站点 ID 和日期匹配,则同时添加流和 ph。如果站点 ID 和日期不同(或不存在),则会创建一个新行,其中仅包含一个表中的记录。

【问题讨论】:

当数据丢失时,外连接会给你空值。它应该实现你想要的 re: '我尝试了各种联接' 看起来外部联接或右联接就足够了,但您已经决定增加自己的努力(工作或不)对问题不重要。 您可以使用 Excel 2010+ 中提供的 Get & TransformPower Query 来执行此操作。 Excel公式会很麻烦,但你也可以使用VBA 【参考方案1】:

在 Microsoft Access 或 mysql 中,UNION 查询可以解决问题。

SELECT Site,    Date,      Time,    Null As pH,    Flow 
FROM TableA
UNION ALL
SELECT Site,    Date,      Time,    pH,    Null as Flow 
FROM TableB

【讨论】:

感谢您的快速回复。这肯定是朝着正确的方向发展,但它使 pH 字段保持空白,并将流量和 pH 记录添加到流量列。任何建议都非常感谢。 这意味着您没有添加答案中指定的Null As pHNull as Flow 顺序很重要!确保两个查询的列顺序正确,就像答案一样。 我的订单有误,而且效果更好,但它仍然没有在必要时合并记录。例如,2017 年 7 月 30 日的记录应该是一行 有没有什么办法可以改变代码来实现所需的输出?感谢您的帮助!

以上是关于合并具有不同记录数的两个表的主要内容,如果未能解决你的问题,请参考以下文章

合并具有不同列数的表

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

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

ClickHouse - CollapsingMergeTree 表引擎 - 记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)

Clearcase - 将两个文件合并为一个具有统一历史记录的文件

将 git repo 分支(具有不同的历史记录)合并到主分支 [重复]