56

假设我有两张桌子:

已知时间:

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 组合的小时数。我更新了样本数据以反映这一点。

4

2 回答 2

94

您需要使用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按上述方式使用,它不会比单独运行两个查询慢,因为它不进行重复检查。

于 2009-08-04T14:26:54.863 回答
14

在您的预期输出中,您的倒数第二行总和不正确,根据表中的数据,它应该是 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
于 2009-08-04T14:42:12.407 回答