我试图根据从CSV文件解析的费用和积分表创建费用和积分的报告。计费表和信用表看起来基本上是相同的,只有一个领域是不同的,如下图所示用零替换空值/将虚拟值替换为空表在Access中
BillingPeriod | ItemCode | ItemName | Charge(Credit) | IsAdjustment | AdjustmentDate | ReportTimestamp
为了创建这个报告我组的费用和信用额度,并根据我的项目代码总结他们。例如,一个查询我有工作,总结了所有的帐单月份附加费用将
SELECT Charges.BillingPeriod, Sum(Charges.Charge) as SumOfCharge
FROM Charges
WHERE (Charges.ItemCode Between 1301 and 1380)
GROUP BY Charges.BillingPeriod;
这是所有罚款和花花公子,但如果找不到物品代码问题就出现了。我希望这些查询具有足够的灵活性,以便能够显示包含或不包含特定费用/信用的摘要,因为您可能不会在一个月内收取费用,并且可能会在另一个月内收取费用。
问题不起作用的查询是这样的一个:
SELECT Credits.BillingPeriod, Sum(Credits.Credit) AS SumOfCredit
FROM Credits
WHERE (((Credits.ItemCode)=2217 Or (Credits.ItemCode)=2218 Or (Credits.ItemCode)=2241 Or (Credits.ItemCode)=2245 Or (Credits.ItemCode)=2260))
GROUP BY Credits.BillingPeriod;
因为我们没有被计入这些特殊项目的代码,它们不能相加,结果集是一个空表。如果出现这种情况,有没有办法可以返回一个空的结算期和一个0的SumOfCredit?我尝试了Nz()函数,以及IIf(IsNull()),但这并没有帮助我。
任何帮助,将不胜感激。
编辑:我改变了查询,以便它看起来像这样:
SELECT Charges.BillingPeriod, SUM(Charges.Charge) AS SumOfCharge
FROM Charges
WHERE (((Charges.ItemCode) Between 1900 And 1995))
GROUP BY Charges.BillingPeriod
UNION
SELECT BillingPeriod, 0
FROM Charges
WHERE NOT EXISTS (SELECT * FROM Charges WHERE (Charges.ItemCode Between 1900 And 1995));
这工作,但它并没有显示所有的计费时段。例如,如果某个特定商品代码的收费时间为2011年1月1日和2011年2月1日,则只会显示这两条记录。我希望它能够在表格中显示每个可应用的结算周期。有月费的地方收费,没有收费的地方收费。我尝试在查询的末尾添加第三个UNION,再次选择BillingPeriod,但它为一个月添加了一个重复记录,这是我不想要的。再次,任何帮助将是真棒。
什么是'BillingPeriod' , 请。这个列的示例数据也是很好的。 –