将两个表合并为一个输出
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
【讨论】:
非常感谢,这是我解决问题所需要的! :)以上是关于将两个表合并为一个输出的主要内容,如果未能解决你的问题,请参考以下文章
Keras,Tensorflow:将两个不同的模型输出合并为一个