访问 '13 - 无法识别字段名称错误,交叉表报告问题



背景

每个月我都会运行一个交叉表查询,然后用访问报告"修饰"。

交叉表SQL:

TRANSFORM Sum(myTable.Field1) AS SumOfField1
SELECT myTable.Date, Sum(myTable.Field1) AS [Daily Totals]
FROM myTable
GROUP BY myTable.Date
PIVOT myTable.Field2;

其中 Field1 是 $ 金额,字段 2(在本例中)将是"选项 1"、"选项 2"或"选项 3"。

典型的交叉表结果:

Date     Option1    Option2   Option3
-----    --------   --------  --------
Day1      $5.00      -$2.37   
Day2                  $3.15
Day3                           $2.22

我的问题

因为 100 次中有 99 次我将在给定月份的每个"选项"中都有数据,所以我创建了一个报告,以"漂亮"格式清理交叉表结果。但是,本月我的原始数据没有任何"Option3"值。因此,选项 3 的交叉表列不会出现在我的查询结果中。然后,由于报告直接从交叉表中提取并按名称查找每个选项列,这会导致我的报告中断给出错误:

Microsoft Access 数据库引擎无法将"[选项 3]"识别为 有效的字段名称或表达式。

故障 排除

我已经尝试了一些关于故障排除的方法:

  1. =Nz(Sum(myTable.Field1),0) in the SQL...然而,这只会产生 0,其中 NULL 表示 field2 的现有值 - 因此"选项3"不会显示为所有 0 的列。
  2. =Nz([选项 3],0) 在报告中...仍然收到上面的错误(字段无法识别)
  3. =IIf(IsError(Option3),0,(Option3)) in the report...收到错误:

您输入的表达式包含无效语法

  1. =IIf(IsEmpty(Option3),0,(Option3)) in report...同上
  2. =IIf(IsMissing (Option3),0,(Option3)) in report...同上

在这一点上,我对如何运行现有报告感到茫然(只是为"Option3"显示一列 0)。

> 在PIVOT子句中指定带有IN列表的列标题。

PIVOT myTable.Field2 IN ('Option1', 'Option2', 'Option3');
然后,这些

列标题将包含在查询结果集中(按列出的顺序),无论源数据是否包含具有这些值的任何行。

副作用是,如果交叉表数据源可能包含 Option4,则不会将其包含在生成的列中。 这对您的报表来说很好,因为它不是为期望 Option4 列而设计的。 但是,如果您在其他地方使用交叉表查询,则可能会引起注意。

在报告中,您可以使用Nz()将选项列中的 Null 替换为零。

最新更新