Access Query中的Distinct Aggregate函数

时间:2016-09-18 16:48:40

标签: sql ms-access distinct aggregate-functions

我有两个表 - Sales(ID,Staff_Name,Sale_Date,Amount),Expense(ID,Expense_Name,Expense_Date,Amount)

问题是在给定日期的两列中显示销售额和费用的总和。

以下代码适用于Oracle SQL:

select sum(distinct sales.amount),sum(distinct expense.amount) from sales,expense where sales.sale_date='06-dec-1996' and expense.expense_date='06-dec-1996';

但是由于MS Access不支持聚合函数内部的不同,我尝试了这个(有效):

SELECT Sum(Sales.amount) FROM (SELECT DISTINCT Sales.amount FROM Sales);

但我无法开始工作我真正需要的东西。我怎么能在MS Access中做到这一点?

1 个答案:

答案 0 :(得分:1)

使用子查询:

select (select sum(sales.amount)
        from sales
        where sales.sale_date = '06-dec-1996'
       ),
       (select sum(expense.amount)
        from expense
        where  expense.expense_date = '06-dec-1996'
       )
from (select count(*) from sales) as s;

注意:

  • from子句仅仅是因为MS Access需要某些内容而不支持dual之类的内容。
  • 可能需要调整日期格式。
  • 此版本优于您的版本。如果两行具有相同的sales.amount值或相同的expense.amount值,该怎么办?你的总数不正确。
  • 永远不要在FROM子句中使用逗号; 始终使用显式JOIN语法。