将两个表合并为一个输出

Posted

技术标签:

【中文标题】将两个表合并为一个输出【英文标题】:Combine two tables for one output 【发布时间】:2010-11-16 16:52:46 【问题描述】:

假设我有两张桌子:

已知时间:

ChargeNum CategoryID 月 小时 111111 1 2/1/09 10 111111 1 3/1/09 30 111111 1 09 年 4 月 1 日 50 222222 1 3/1/09 40 111111 2 09 年 4 月 1 日 50

未知时间:

ChargeNum 月 小时 111111 2/1/09 70 111111 09 年 3 月 1 日 40.5 222222 7/1/09 25.5

我需要将这些时间(忽略月份)分组到一个数据表中,以便我的预期结果如下:

ChargeNum CategoryID 小时数 111111 1 90 111111 2 50 111111 未知 110.5 222222 1 40 222222 未知 25.5

我似乎无法弄清楚这一点。任何帮助将不胜感激!

编辑:我需要汇总每个 ChargeNum/Category 组合的小时数。我更新了示例数据以反映这一点。

【问题讨论】:

【参考方案1】:

您需要使用UNION 来组合两个查询的结果。在你的情况下:

SELECT ChargeNum, CategoryID, SUM(Hours)
FROM KnownHours
GROUP BY ChargeNum, CategoryID
UNION ALL
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours)
FROM UnknownHours
GROUP BY ChargeNum

注意 - 如果您使用上述UNION ALL,它不会比单独运行两个查询慢,因为它不进行重复检查。

【讨论】:

我听说这非常慢。有没有其他方法可以做到这一点? 唯一可能更快的方法是将数据存储在一个表中,而不是两个。在未知时间使用CategoryID = NULL @Matthew:你从哪里听到的? union all 绝对快。 不幸的是,我已经进行过那次谈话...***.com/questions/1209372/… 他原来的答案是 UNION,而不是 UNION ALL。这就是我所指的。【参考方案2】:

在您的预期输出中,倒数第二行的总和不正确,根据表中的数据,它应该是 40,但这是查询:

Select  ChargeNum, CategoryId, Sum(Hours)
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

这是输出:

ChargeNum  CategoryId 
---------- ---------- ----------------------
111111     1          40
111111     2          50
111111     Unknown    70
222222     1          40
222222     Unknown    25.5

【讨论】:

非常感谢,这是我解决问题所需要的! :)

以上是关于将两个表合并为一个输出的主要内容,如果未能解决你的问题,请参考以下文章

合并两个有序链表【递归、迭代】

Leetcode--合并两个有序链表(21)

Keras,Tensorflow:将两个不同的模型输出合并为一个

将两个greps的输出合并为一个文件

Java每日算法--将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

区间合并