2

要设置问题,我必须在用于跟踪会费和注册的 Access 表中跟踪 4 条记录。这个表名是“交易”

ID | Transaction Date | Transaction Name | Credit Account | Debit Account | Amount
1 | 9/1/2011 | 2011 Yearly Registration | Accounts Receivable | Income : Registration | 27
2 | 2/18/2012 | Registration Payment | Cash | Accounts Receivable | 27
3 | 11/1/2012 | 2012 Yearly Registration | Accounts Receivable | Income : Registration | 27
4 | 12/7/2012 | Registration Payment | Cash | Accounts Receivable | 27

(事务名称字段实际上是一个 ID 字段,它与另一个存储实际名称的表具有 FK。这将在稍后显示)。

然后,我创建了一个查询,将这些记录转换为一种格式,我可以将数量相加以找出余额:

SELECT [Transaction Date], [Transaction Name], (select [Account Name] from Account_lookup where ID = Transactions.[Credit Account]) as Account , sum(Amount) as [Totals]
FROM Transactions
GROUP BY [Transaction Date],[Transaction Name],[Credit Account]
UNION SELECT  [Transaction Date],[Transaction Name],(select [Account Name] from Account_lookup where ID = Transactions.[Debit Account]) as Account, sum(Amount)*-1 as [Totals]
FROM Transactions
GROUP BY [Transaction Date],[Transaction Name],[Debit Account]
ORDER BY 3, 1 DESC;

结果如下(收入和现金记录已被删除,因为它们对于这个问题并不重要)。该查询称为“贷方和借方账户总计”。

Transaction Date | Transaction Name | Account | Totals
9/1/2011 | 2011 Yearly Registration | Accounts Receivable | 27
2/18/2012 | Registration Payment | Accounts Receivable | (27)
11/1/2012 | 2012 Yearly Registration | Accounts Receivable | 27
12/7/2012 | Registration Payment | Accounts Receivable | (27)

因此,对 Totals 列求和的查询应该返回 0。但事实并非如此。

当我在上面的查询之上运行以下查询时(我的查询查询另一个查询),

SELECT [Credit and Debit Account Totals].Account, Sum([Credit and Debit Account Totals].Totals) AS SumOfTotals
FROM [Credit and Debit Account Totals]
GROUP BY [Credit and Debit Account Totals].Account
HAVING ((([Credit and Debit Account Totals].Account)="Accounts Receivable"));

我得到以下信息:

Account | SumOfTotal
Accounts Receivable | 27

如果我将总和更改为计数,那么我得到 3。我期望总和为 0,计数为 4。

如何让 Access 使用我的所有 4 条记录?我猜测 Access 以某种方式忽略了第二次付款,因为 Transaction Name 是相同的,但是 Name 不是 sum 查询的一部分,并且 Date 字段使每一行在第一个查询中总体上是不同的。

我试过把 ALL 放在 SELECT 之后,但这没有用。我是否必须先将所有数据复制到另一个表中 - iow 是否因为在联合查询之上运行总和查询而使 Access 感到困惑?当我将日期添加到第二个查询时,从而使每一行都不同,我看到所有 4 条记录。

4

1 回答 1

0

退后一步。更改您的第一个查询:

SELECT [Transaction Date], [Transaction Name], 
       [Credit Account] As Account,Amount 
FROM Transactions
UNION 
SELECT [Transaction Date],[Transaction Name], 
       [Debit Account] As Account,Amount*-1 
FROM Transactions

然后

SELECT [Credit and Debit Account Totals].Account, 
       Sum([Credit and Debit Account Totals].amount) AS SumOfamount
FROM [Credit and Debit Account Totals]
GROUP BY [Credit and Debit Account Totals].Account
HAVING [Credit and Debit Account Totals].Account="Accounts Receivable"

我认为分组层太复杂了。

编辑重新评论

SELECT [Transaction Date], [Transaction Name], 
       Account, Sum(Amount ) AS Total
FROM (SELECT [Transaction Date], [Transaction Name],
      [Credit Account] As Account,Amount 
FROM Transactions
UNION 
SELECT [Transaction Date],[Transaction Name], 
       [Debit Account] As Account,Amount*-1 
FROM Transactions)  AS q
GROUP BY [Transaction Date], [Transaction Name], Account
ORDER BY 3, 1 DESC;
于 2013-01-16T14:03:54.050 回答