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

标签 sql join firebird

我在 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/

相关文章:

php - MySQL - 在 PHP 中使用一对多映射连接表

stored-procedures - Firebird 2.1 存储过程连接多行文本

mysql : Get latest value and sum of values from previous hour

php - 无法从存储引擎读取自动增量值

sql - 在 PL/SQL 中隐藏/抽象 SQL 的技术/技巧

sql - JOIN 中表的顺序

MySQL 查询连接最大值

SQL 子查询与否?

count - 如何加速 Interbase/Firebird 中的 Count(*)

sql - 检查表的列是否具有唯一约束