假设我有两张桌子:
已知时间:
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 组合的小时数求和。 我更新了示例数据以反映这一点。
您需要使用
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
,它不会比单独运行两个查询慢,因为它不进行重复检查。
在您的预期输出中,倒数第二行总和不正确,根据表中的数据,它应该是 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