【问题标题】:ACCESS SQL - Sum column grouped by a criteria and show also empty resultsACCESS SQL - 按条件分组的总和列并显示空结果
【发布时间】:2018-11-12 21:18:13
【问题描述】:

对于这个问题,假设我有两个表:Transactions 和 Categories。

交易:

  • Transaction_ID
  • Category_ID_FK
  • 交易日期
  • 交易价值

分类:

  • Category_ID
  • 类别描述

我正在尝试编写一个查询,它将按 Category_ID 分组的一个月(例如 12 月)内发生的所有 TransactionValues 相加,并显示所有类别的结果,即使表上没有特定的 Transactions类别。

SELECT Categories.Category_ID, Sum(TransactionValue) 
FROM Categories LEFT JOIN Transactions ON Categories.Category_ID = Transactions.Category_ID_FK
WHERE Month(TransactionDate) = '12' 

这样,我只能从 Transactions 表中至少有一个事务的类别中获得结果。

谢谢大家!

【问题讨论】:

  • 您的查询没有GROUP BY,因此您应该遇到语法错误。

标签: sql ms-access


【解决方案1】:

您可以在 MS Access 中使用子查询:

SELECT c.Category_ID, Sum(t.TransactionValue) 
FROM Categories as c LEFT JOIN
     (SELECT t.*
      FROM Transactions as t
      WHERE Month(t.TransactionDate) = 12
     ) as t
     ON c.Category_ID = t.Category_ID_FK
GROUP BY c.Category_ID;

典型的 SQL 语法会在 ON 子句中包含条件:

SELECT c.Category_ID, Sum(t.TransactionValue) 
FROM Categories as c LEFT JOIN
     Transactions as t
     ON c.Category_ID = t.Category_ID_FK AND Month(t.TransactionDate) = 12
GROUP BY c.Category_ID;

我认为 MS Access 不支持这种语法。

【讨论】:

  • 谢谢你,戈登。这解决了它。正如您所提到的,第二个解决方案不适用于 Access。我收到“不支持 JOIN 表达式”错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多