2016-09-18 80 views
1

我有两个表 - 销售(ID,Staff_Name,SALE_DATE,量),费用(ID,Expense_Name,EXPENSE_DATE,量)不同的集合函数

的问题是,显示金额的销售总和以及给定日期的两列费用。

下面的代码工作中的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中执行此操作?

+0

在您当前的查询中没有连接条件,因此您将该行的所有行从'Sales'交叉连接到该日期的'Expense'中的所有行。这就是为什么你尝试添加'DISTINCT'的原因,但这只会隐藏一个非常糟糕的查询。戈登的方法好得多。 – dnoeth

回答

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语法。
+0

非常感谢..我对SQL不熟悉,特别是Access的.. – user55844