如何让MS-Access停止忽略sum和count查询中的记录

时间:2013-01-16 13:15:17

标签: ms-access

要设置问题,我必须在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以某种方式忽略了第二笔付款,因为交易名称是相同的,但是Name不是和查询的一部分,而Date字段使得每一行在第一个查询中都是不同的。

我已尝试在SELECT之后输入ALL,但这不起作用。我是否必须首先将所有数据复制到另一个表中 - 通过在联合查询之上运行求和查询,我是否感到困惑?当我向第二个查询添加日期,从而使每一行不同时,我会看到所有4条记录。

1 个答案:

答案 0 :(得分: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;