MS-Access:如何根据日期对来自不同表的多个值求和

时间:2016-12-29 22:00:47

标签: sql ms-access

我有两个类似的表格如下

表1

Date           Amount     Tax
4/1/2016       1000       100
4/1/2016       2000       200
5/3/2016       1500       150
5/6/2016       1000       100
5/6/2016       3000       300
7/9/2016       2500       250

表2

Date           Amount     Tax
4/1/2016       1000       100
4/2/2016       3000       300
5/3/2016       1500       150
5/9/2016       4000       400
8/11/2016      3000       300
10/9/2016      2000       200

两个表中的日期可能相似或不同 我想要两个查询。
首先,一个查询,它给出了所需日期之间两个表中每个日期的金额和税额之和。例如:表1有2个条目,表2有4个2016年的1个条目。所以结果如下(总结所有三个条目)

Date           Amount     Tax
4/1/2016       4000       400
4/2/2016       3000       300
5/3/2016       3000       300
5/6/2016       4000       400
5/9/2016       4000       400
7/9/2016       2500       250
8/11/2016      3000       300
10/9/2016      2000       200

其次,在所需日期之间给出两个表中每个月的金额和税额之和的查询。例如输出如下

Date           Amount     Tax
4/2016         4000       400
5/2016        11000      1100
7/2016         2500       250
8/2016         3000       300
10/2016        2000       200

到目前为止我已经写过的查询(不工作)

SELECT date, sum(Amount),sum(Tax)
From Table1
WHERE Date BETWEEN #04/01/2016# AND #12/31/2016#
UNION ALL
SELECT date, sum(Amount),sum(Tax)
From Table2
WHERE Date BETWEEN #04/01/2016# AND #12/31/2016#
GROUP BY Date

1 个答案:

答案 0 :(得分:1)

对于第一个查询,请考虑具有外部查询聚合的联合查询派生表:

SELECT q1.[Date], SUM(q1.Amount) AS DayTotalAmt, SUM(q1.Tax) AS DayTotalTax
FROM
  (SELECT [Date], Amount, Tax
   FROM Table1
   UNION ALL
   SELECT [Date], Amount, Tax
   FROM Table2
  ) AS q1
GROUP BY q1.[Date]

对于第二个查询,请考虑将第一个查询用作另一个外部查询图层的源,该图层运行带有月/年聚合的WHERE过滤器:

SELECT Format(q2.Date, "M/YYYY"), SUM(q2.DayTotalAmt) AS MonthTotalAmt, 
       SUM(q2.DayTotalTax) AS MonthTotalTax
FROM
  (SELECT q1.[Date], SUM(q1.Amount) AS DayTotalAmt, SUM(q1.Tax) AS DayTotalTax
   FROM
     (SELECT [Date], Amount, Tax
      FROM Table1
      UNION ALL
      SELECT [Date], Amount, Tax
      FROM Table2) AS q1
   GROUP BY q1.[Date]
  ) AS q2    
WHERE q2.Date BETWEEN CDate("4/1/2016") AND CDate("12/31/2016")
GROUP BY Format(q2.Date, "M/YYYY")

或者如果您保存第一个查询:

SELECT Format(q.Date, "M/YYYY"), SUM(q.DayTotalAmt) AS MonthTotalAmt, 
       SUM(q.DayTotalTax) AS MonthTotalTax
FROM Query1 q
WHERE q.Date BETWEEN CDate("4/1/2016") AND CDate("12/31/2016")
GROUP BY Format(q.Date, "M/YYYY")