在左外连接中使用 Sum 函数

Posted

技术标签:

【中文标题】在左外连接中使用 Sum 函数【英文标题】:Using Sum function in Left Outer Join 【发布时间】:2016-02-02 19:57:33 【问题描述】:

我在下面有两个表:

1. DatesMaster

+----------+---------------+
|  m_date  |    capacity   |
+----------+---------------+
| 1/2/2016 |          10   |
| 2/2/2016 |          10   |
| 3/2/2016 |          10   |
+----------+---------------+

2. Schedule

+----------+-------+
| sch_date | qty   |
+----------+-------+
| 1/2/2016 |   2   |
| 1/2/2016 |   2   |
| 1/2/2016 |   2   |
| 2/2/2016 |   5   |
| 2/2/2016 |   5   |
| 3/2/2016 |   5   |
| 3/2/2016 |   1   |
+----------+-------+

如何使用左外连接获得capacity - qty 的结果,从而可以将DatesMasterAvailability 的所有日期显示为capacityqty 相同日期之和之间的差异?

【问题讨论】:

我在 vb.net 中使用访问 我试过:SELECT DatesMaster.m_date, DatesMaster.capacity - SUM(Schedule.qty) As Balance FROM DatesMaster LEFT OUTER JOIN Schedule ON DatesMaster.m_date = Schedule.sch_date GROUP BY DateMaster.m_date 您是否尝试过解决 NULL 问题? 是的,我做对了!我使用 IIf 和 Is Null 并且它有效。 Nz() 不起作用....非常感谢您的建议! 很高兴能帮上忙。请记住,如果答案有用,您可以选择accept。 【参考方案1】:

SELECT 中不在 GROUP BY 中的任何列都必须包含在聚合函数中,以便您可以在此查询中使用 MAX

SELECT DatesMaster.m_date
    ,MAX(DatesMaster.capacity) - SUM(Schedule.qty) AS Balance
FROM DatesMaster
LEFT JOIN Schedule ON DatesMaster.m_date = Schedule.sch_date
GROUP BY DatesMaster.m_date

或者,将capacity 列添加到GROUP BY

SELECT DatesMaster.m_date
    ,(DatesMaster.capacity) - SUM(Schedule.qty) AS Balance
FROM DatesMaster
LEFT JOIN Schedule ON DatesMaster.m_date = Schedule.sch_date
GROUP BY DatesMaster.m_date, DatesMaster.capacity

【讨论】:

上述方法无效,出现错误:System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常附加信息:您尝试执行的查询不包含指定的表达式“mdate”作为聚合函数的一部分。 事实上,我原来的 DatesMaster 表包含日程表中不存在的 m_date.... 2-2016、2-2-2016 和 3-2-2016 但重复...... 在您的原始查询中,GROUP BY 中有错字。你能确定这不是错误的原因吗?将DateMaster.m_date 更改为DatesMaster.m_date。你少了一个“s”。 你完全正确!!!我打错字了....非常感谢!!!现在它在 Balance 列中为我提供了结果,但仅针对与时间表匹配的那些...正在显示其他 DatesMaster.m_date ,但相应的 Balance 为 Null 而从逻辑上讲,我想在表中显示 DatesMaster.capacity ....(DatesMaster 表包含日程表中不存在的 m_date)您能否建议如何做到这一点? 对于 MS Access,您可以在此处找到一些可能的选项:***.com/a/247872/3854195

以上是关于在左外连接中使用 Sum 函数的主要内容,如果未能解决你的问题,请参考以下文章

左外连接和右外连接的区别

3 个表,左外连接,SUM

每组右表的左外连接?

结合左外连接和内连接 + 聚合函数 - 空结果集问题

使用包含的左外连接 Pandas 数据框

使用 LINQ 的 IQueryable 左外连接的扩展方法