【发布时间】:2015-02-06 21:06:44
【问题描述】:
我已经在 Stack Overflow 中对此进行了研究,并且知道提供的解决方案,其中建议是 MSAccess 报告覆盖查询,并且排序顺序通常在报告属性中设置,或者通过 VBA OnLoad 或类似的东西设置。然而,我注意到我的 MS Access 报告中有一些奇怪的东西,那就是在我使用以下查询创建的一份报告中,报告以完美的顺序显示所有内容:
SELECT Format([DateOfEnquiry],"yyyy") AS [Year], Count(T_Enquiry.DateOfEnquiry) AS
NumOfEnquiries, T_Enquiry.YearLevel
FROM T_Enquiry
GROUP BY Format([DateOfEnquiry],"yyyy"), T_Enquiry.YearLevel, IIf([YearLevel] Is
Null,0,Val([YearLevel]))
ORDER BY Format([DateOfEnquiry],"yyyy"), IIf([YearLevel] Is Null,0,Val([YearLevel]));
这里我特别关心 [YearLevel] 字段的排序/排序。 [YearLevel] 是一个文本查找字段,因为它不仅包含整数 1-12,而且在查找字段中还包含字母“K”和“P”。运行上述查询时,它会返回正确的顺序——即从“K”到“P”,然后从 1-12。我已将此查询用作我的报告的记录源,并且报告列出了所有项目,就像运行查询本身时数据表所做的一样。完美!
现在看一下我用作另一个报告的记录源的以下查询:
SELECT Format([DateOfEnquiry],"yyyy") AS [Year], Count(T_Enquiry.Outcome) AS
NumOfEnrolments, T_Enquiry.YearLevel
FROM T_Enquiry
WHERE (((T_Enquiry.Outcome)="Enrolled"))
GROUP BY Format([DateOfEnquiry],"yyyy"), T_Enquiry.YearLevel, IIf([YearLevel] Is
Null,0,Val([YearLevel]))
ORDER BY Format([DateOfEnquiry],"yyyy"), IIf([YearLevel] Is Null,0,Val([YearLevel]));
运行此查询时,数据表处于完美的 [YearLevel] 顺序。但是报告视图不是。报表视图首先将 [YearLevel] 10,然后是 12,然后是 2。两个 SQL 查询之间的唯一区别(除了各自的字段)是上面第二个查询中的 WHERE 语句。这应该对报告视图产生影响吗?我不明白怎么做。
有人可以建议解决方法吗?或者指出我在报告属性、VBA 代码、SQL 查询中可能缺少的内容……或者甚至可能有一个宏可以更轻松地以正确的顺序对 [YearLevel] 进行排序?我期待任何建议。
干杯。
新信息
我进行了更多测试,并确定在我的报表设计视图中,报表页脚中有一个名为 Txt_TotalEnrol 的文本框,其中包含以下计算:
=Sum([NumOfEnrolments])
这是一些其他总数的补充。似乎正是这个文本框导致了 [YearLevel] 的顺序失效。我删除了 Txt_TotalEnrol,[YearLevel] 的顺序又回到了我想要的顺序。
为什么这个操作会影响报表中[YearLevel]的顺序?任何建议都非常感谢。
【问题讨论】:
-
尝试在 ORDER BY 之后处理 GROUP BY,让我知道你仍然有同样的效果。
-
@usermesamjosin -- 什么?嗯,没有……
-
请记住,报告有自己的 OrderBy 字段。检查报表(在设计视图中)是否清除了 OrderBy 字段
标签: sql vba ms-access report ms-access-2010