MS Access 2010余额显示SQL查询问题求助
解决MS Access子窗体余额显示问题
嘿,我来帮你搞定这个余额显示的问题!你的原查询能算出已付金额总和,但缺了预算数据的关联,所以没法计算余额。咱们一步步来修正:
1. 修正SQL查询,关联预算数据
首先,余额是「预算 - 已付金额总和」,所以得先把对应合同的预算数据拉进来。假设你的预算存在一个单独的表(比如tblContracts,包含FY、ContractNumber、Budget字段),这是比较合理的设计(毕竟一个合同的预算应该是唯一的,不会跟每条发票重复存)。修正后的查询如下:
SELECT tblInvoices.FY, tblInvoices.ContractNumber, tblContracts.Budget, Sum(tblInvoices.AmountPaid) AS [Sum Of AmountPaid], tblContracts.Budget - Sum(tblInvoices.AmountPaid) AS Balance FROM tblInvoices LEFT JOIN tblContracts ON tblInvoices.FY = tblContracts.FY AND tblInvoices.ContractNumber = tblContracts.ContractNumber WHERE tblInvoices.FY = [which FY] GROUP BY tblInvoices.FY, tblInvoices.ContractNumber, tblContracts.Budget;
关键调整说明:
- 用
LEFT JOIN关联预算表,确保哪怕某个合同还没有发票记录,也能显示预算值(如果不需要这个效果,改成INNER JOIN也可以) - 把原查询的
HAVING过滤改成WHERE,因为FY的筛选在分组前执行,效率更高 - 新增了
Budget字段和计算字段Balance,直接算出余额
如果你的预算数据是存在tblInvoices表中(虽然这种设计不太推荐,容易重复存储),可以用First()函数提取该合同的预算值(假设同合同的预算记录一致):
SELECT tblInvoices.FY, tblInvoices.ContractNumber, First(tblInvoices.Budget) AS ContractBudget, Sum(tblInvoices.AmountPaid) AS [Sum Of AmountPaid], First(tblInvoices.Budget) - Sum(tblInvoices.AmountPaid) AS Balance FROM tblInvoices WHERE tblInvoices.FY = [which FY] GROUP BY tblInvoices.FY, tblInvoices.ContractNumber;
2. 调整子窗体文本框绑定
修改完查询后,回到子窗体设计:
- 找到余额对应的文本框,把它的控件来源设置为
Balance(也就是我们在查询里定义的余额字段名) - 可以给文本框设置货币格式,让显示更规范
3. 验证测试
保存查询和窗体后,点击「YTD Spent」按钮测试,现在应该能正常显示预算、已付总和和对应的余额了。如果还是有问题,检查下预算表的表名、字段名是否和你实际的数据库一致,调整对应的名称即可。
内容的提问来源于stack exchange,提问作者user2306388
相关产品推荐
相关产品推荐

