我在 SQL 方面遇到了一个非常简单的问题,我只是无法正确地表达它(因此我在谷歌中没有找到任何内容,而且我的标题可能具有误导性)
问题是:我有一个大表,其中包含格式为(ID、EmployeeID、Date、Value)的交易信息(还有更多,但目前只有这些重要)以及所有 EmployeeID 的列表。我想要的是一个结果表,显示所有员工 ID 及其在给定时间跨度内的交易汇总值。 问题是:如何将那些在给定时间段内没有条目的员工放入结果表中?
例如
ID EMPLID DATE VALUE
1 1 2013-01-01 1000
2 2 2013-02-02 2000
3 1 2013-01-03 3000
4 2 2013-04-01 2000
5 2 2013-03-01 2000
6 1 2013-02-01 4000
EMPLID NAME
1 bob
2 alice
现在我想要 2013 年 3 月 1 日之后所有交易的总值(value),如下所示
EMPLID VALUE
1 0 <- how to get this based on the employee table?
2 4000
使用的 SQL Server 是 Firebird,我通过 JDBC 连接到它(如果重要的话)
最佳答案
SELECT a.EmpID, a.Name,
COALESCE(SUM(b.Value), 0) TotalValue
FROM Employee a
LEFT JOIN Transactions b
ON a.EmpID = b.EmpID AND
b.Date >= '2013-03-01'
GROUP BY a.EmpID, a.Name
要进一步了解有关联接的更多知识,请访问以下链接:
关于SQL:从 A 列中选择全部,并从 B 列中添加一个值(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811107/