【问题标题】:Using Sum function in Left Outer Join在左外连接中使用 Sum 函数
【发布时间】: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

标签: sql ms-access left-join


【解决方案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,您可以在此处找到一些可能的选项:stackoverflow.com/a/247872/3854195
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2015-03-06
  • 2011-10-01
  • 2016-11-23
相关资源
最近更新 更多