【问题标题】:Access UNION Query Crashes Access访问 UNION 查询崩溃访问
【发布时间】: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 当我尝试过滤它说连接中的不相等列时,所有查询都有效,然后我重新运行过滤器并且它有效。重新运行它并崩溃访问.. ????

标签: sql ms-access join union


【解决方案1】:

我认为您在第二个查询(quniqeTotals)中的问题必须匹配联合中的两个选择中的字段。 所以右边是

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
,CAREUsageDiscount
,Sum(CAREBaseChargeDiscount) AS TotalCAREBaseChargeDiscount
 ,(APN & PeriodID) AS PrimKey
FROM qInvoicesManual
GROUP BY APN
,Periodid
,TotalVariableCharge
,CAREUsageDiscount
,(APN & PeriodID);

【讨论】:

  • "union 中的两个 select 中的字段必须匹配。"确实。
  • 尝试重新排列顺序,使它们完全相同。没有解决任何问题。我实际上遇到了 qUniqueInvoices 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多