要设置问题,我必须在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条记录。
答案 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;