[英]How can I get MS-Access to stop ignoring records in both a sum and count query
要设置此问题,我必须在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会以某种方式忽略第二笔付款,因为“交易名称”是相同的,但是“名称”不是总和查询的一部分,并且“日期”字段使第一行查询中的每一行都与众不同。
我试过将所有都放在SELECT之后,但这没用。 我是否必须首先将所有数据复制到另一个表中?现在,通过在联合查询之上运行总和查询,Access会变得混乱吗? 当我在第二个查询中添加日期,从而使每一行都不同时,我看到了所有4条记录。
退后一步。 更改您的第一个查询:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.