【问题标题】:Access '13 - Does not recognize field name Error, Crosstab to Report IssueAccess '13 - 不识别字段名称错误,交叉表以报告问题
【发布时间】:2016-06-15 18:35:29
【问题描述】:

背景

每个月我都会运行一个交叉表查询,然后使用访问报告“完善”该查询。

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 是 $ 金额,而 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. =Nz([Option3],0) 在报告中...仍然得到上面的错误(字段无法识别)
  3. =IIf(IsError(Option3),0,(Option3)) 在报告中...得到错误:

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

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

在这一点上,我不知道如何让我现有的报告运行(只为“Option3”显示一列 0)。

【问题讨论】:

    标签: sql ms-access syntax-error crosstab


    【解决方案1】:

    Specify column headingsPIVOT 子句中带有IN 列表。

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

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

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

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

    【讨论】:

    • 有没有人告诉过你你很聪明?不敢相信我没想过要这样做(有时我过于专注于 Access 功能而无法考虑普通 SQL)......但这就像一个魅力,谢谢!
    • 永远不会! :-) 当我希望月份名称交叉表列以月份顺序而不是字母顺序出现时,我发现了该功能。所以它有用的原因不止一个。问候。
    • 很好的解决方案,HansUp!
    • 我的问题是由使用公式选择值的复杂列引起的。 PIVOT Query 似乎不喜欢过于复杂。所以现在我在报告中进行计算。关于列是否有值,我在报告中使用 Try...Catch 语句在后面的代码(.rdlc)中管理我的列,并跳过试图获取数据的代码。我尝试了几种方法,我似乎没有因为一列没有值而得到你的错误;您可能还想检查列中的其他复杂公式...
    • 与解决方案中提到的限制一样,不能通过单独查询以所需格式提供列吗?例如从表中选择列。将它们格式化为字符串数组,然后将其提供给语句......只是认为它可以工作......
    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多