SQL:从列A中选择全部,并从列B添加值(如果存在)

时间:2013-04-04 12:26:48

标签: sql join firebird

我对SQL有一个很容易的问题,我只是不能正确地说出来(因此我在google中找不到任何内容,我的标题可能会产生误导)

问题是:我有一个包含表单中的事务信息的大表(ID,EmployeeID,Date,Value)(还有一些,但只有当前的那些),以及所有EmployeeID的列表。我想要的是一个结果表,显示所有员工ID及其在给定时间跨度内的事务聚合值。 问题是:如何将这些员工纳入结果表中,并且在给定时间段内没有条目?

e.g。

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-03-01之后所有交易的汇总价值

EMPLID VALUE
1      0          <- how to get this based on the employee table?
2      4000

正在使用的SQL Server是Firebird,我通过JDBC连接到它(如果这很重要)

1 个答案:

答案 0 :(得分:4)

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

要进一步了解联接,请访问以下链接: