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

时间:2016-03-02 18:21:18

标签: sql ms-access syntax-error crosstab

背景

每个月我都会运行一个交叉表查询,然后使用访问报告对其进行“修改”。

CROSSTAB 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是$ Amount,而Field2(对于此示例)要么是“Option1”,“Option2”,要么是“Option3”。

典型的串联结果:

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

我的问题

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

  

Microsoft Access数据库引擎无法将“[Option3]”识别为   有效的字段名称或表达。

故障排除

我在故障排除方面做了一些尝试:

    SQL中的
  1. = Nz(Sum(myTable.Field1),0)...但是这只产生0,其中field2的现有值为NULL - 因此“Option3”不显示为一个全0的列。
  2. 报告中的
  3. = Nz([Option3],0)...仍然出现上述错误(字段无法识别)
  4. 报告中的
  5. = IIf(IsError(Option3),0,(Option3))...得到错误:
  6.   

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

      报告中的
    1. = IIf(IsEmpty(Option3),0,(Option3))...与上述相同
    2. 报告中的
    3. = IIf(IsMissing(Option3),0,(Option3))...与上述相同
    4. 此时,我对如何运行现有报告感到茫然(仅显示“Option3”的0列)。

1 个答案:

答案 0 :(得分:3)

Specify column headings IN子句中包含PIVOT列表。

PIVOT myTable.Field2 IN ('Option1', 'Option2', 'Option3');

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

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

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