合并具有不同记录数的两个表
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 & Transform
或 Power 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 pH
和Null as Flow
列
顺序很重要!确保两个查询的列顺序正确,就像答案一样。
我的订单有误,而且效果更好,但它仍然没有在必要时合并记录。例如,2017 年 7 月 30 日的记录应该是一行
有没有什么办法可以改变代码来实现所需的输出?感谢您的帮助!以上是关于合并具有不同记录数的两个表的主要内容,如果未能解决你的问题,请参考以下文章
ClickHouse - CollapsingMergeTree 表引擎 - 记录不会合并,即使它们具有相同的列值和不同的符号(+1/-1)