【发布时间】:2018-01-30 04:00:36
【问题描述】:
我有一个生成 2 组发票查询(qInvoicesAutomatic 和 qInvoicesManual)的计费系统。我从两个发票查询的联合中构建了两个查询,一个计算发票记录的数量,另一个计算整个账单的总额。这两个我都可以成功运行(返回相同数量的记录),每个代码如下:
qUniqueInvoices
SELECT DISTINCT qInvoicesAutomatic.APN AS APN
,qInvoicesAutomatic.PeriodID AS PeriodID
,count(*) AS InvoiceRecords
,(qInvoicesAutomatic.APN & qInvoicesAutomatic.PeriodID) AS PrimKey
FROM qInvoicesAutomatic
GROUP BY qInvoicesAutomatic.APN
,qInvoicesAutomatic.PeriodID
,(qInvoicesAutomatic.APN & qInvoicesAutomatic.PeriodID)
UNION
SELECT DISTINCT qInvoicesManual.APN AS APN
,qInvoicesManual.PeriodID AS PeriodID
,count(*) AS InvoiceRecords
,(APN & PeriodID) AS PrimKey
FROM qInvoicesManual
GROUP BY qInvoicesManual.APN
,qInvoicesManual.PeriodID
,(APN & PeriodID);
qUniqueTotals
SELECT DISTINCT qInvoiceBasechargeAUTO.APN
,qInvoiceBasechargeAUTO.PeriodID
,Sum(qInvoiceBasechargeAUTO.TotalBaseCharge) AS TotalAnnualBaseCharge
,qInvoiceUsageAUTO.TotalVariableCharge
,(Sum(qInvoiceBasechargeAUTO.TotalBaseCharge) + (qInvoiceUsageAUTO.TotalVariableCharge) - (qinvoiceUsageAUTO.CAREUsageDiscount) - Sum(qInvoiceBasechargeAUTO.CAREBasechargeDiscount)) AS TotalAnnual
,qinvoiceUsageAUTO.CAREUsageDiscount
,Sum(qInvoiceBasechargeAUTO.CAREBasechargeDiscount) AS TotalCAREBaseChargeDiscount
,(qInvoiceBasechargeAUTO.APN & qInvoiceBasechargeAUTO.PeriodID) AS PrimKey
FROM qInvoiceBasechargeAUTO
INNER JOIN qInvoiceUsageAUTO ON qInvoiceBasechargeAUTO.APN = qInvoiceUsageAUTO.APN
WHERE (((qInvoiceBasechargeAUTO.PeriodID) = [qInvoiceUsageAUTO].[PeriodID]))
GROUP BY qInvoiceBasechargeAUTO.APN
,qInvoiceBasechargeAUTO.PeriodID
,qInvoiceUsageAUTO.TotalVariableCharge
,qInvoiceUsageAUTO.CAREUsageDiscount
,(qInvoiceBasechargeAUTO.APN & qInvoiceBasechargeAUTO.PeriodID)
UNION
SELECT DISTINCT APN
,PeriodID
,Sum(TotalBaseCharge) AS TotalAnnualBaseCharge
,TotalVariableCharge
,(Sum(TotalBaseCharge) + TotalVariableCharge - CAREUsageDiscount - Sum(CAREBaseChargeDiscount)) AS TotalAnnual
,(APN & PeriodID) AS PrimKey
,CAREUsageDiscount
,Sum(CAREBaseChargeDiscount) AS TotalCAREBaseChargeDiscount
FROM qInvoicesManual
GROUP BY APN
,Periodid
,TotalVariableCharge
,CAREUsageDiscount
,(APN & PeriodID);
然后,我在 qUniqueBills 的 PrimKey 上加入 qUniqueInvoices 和 qUniqueTotals,以获取有关每个账单的信息(发票记录数和总信息)。如下查询:
qUniqueBills
SELECT qUniqueInvoices.APN
,qUniqueInvoices.PeriodID
,qUniqueInvoices.InvoiceRecords
,qUniqueTotals.TotalAnnual
FROM qUniqueInvoices
LEFT JOIN qUniqueTotals ON qUniqueInvoices.PrimKey = qUniqueTotals.PrimKey
ORDER BY qUniqueInvoices.APN
,qUniqueInvoices.PeriodID;
我的问题是,当我尝试在数据表表单中过滤 qUniqueBills 时,它要么使 Access 崩溃,要么返回联合查询中的行数不相等,或者说输入有效值。重申一下,上述所有查询在运行时都是单独工作的。我试过修复数据库。有没有更好的方法来加入包含相同数据集的发票数据?
【问题讨论】:
-
更新:我修复了所有惰性引用,以便它们也包含表名(仍然懒得重新上传代码,因为它不会影响任何东西)。以相反的顺序重新运行查询,直到 qUniqueInvoices 当我尝试过滤它说连接中的不相等列时,所有查询都有效,然后我重新运行过滤器并且它有效。重新运行它并崩溃访问.. ????