合并两个表以获得一个输出

问题描述 投票:0回答:2

假设我有两张桌子:

已知时间:

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

未知时间:

ChargeNum 月小时数
111111 2/1/09 70
111111 2009 年 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 组合的小时数求和。 我更新了示例数据以反映这一点。

sql union
2个回答
99
投票

您需要使用

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
,它不会比单独运行两个查询慢,因为它不进行重复检查。


15
投票

在您的预期输出中,倒数第二行总和不正确,根据表中的数据,它应该是 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
© www.soinside.com 2019 - 2024. All rights reserved.