在左外连接中使用 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
的结果,从而可以将DatesMaster
和Availability
的所有日期显示为capacity
与qty
相同日期之和之间的差异?
【问题讨论】:
我在 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 函数的主要内容,如果未能解决你的问题,请参考以下文章