访问报告:如何按一个字段分组,但按另一个字段排序?
Posted
技术标签:
【中文标题】访问报告:如何按一个字段分组,但按另一个字段排序?【英文标题】:Access Report: How to group on one field, but sort by another? 【发布时间】:2020-03-11 13:41:12 【问题描述】:我已经阅读了类似的问题,但它们似乎不太适合我的问题,或者它们处于不同的环境中。
我正在使用 MS-Access 2016。
我有一份客户投诉报告,其中包含以下字段:年、月、计数([投诉 #])、投诉描述。 (投诉 # 是我们分配给输入表格中的每个投诉的文字 ID 号)
我按年和月对报告进行分组,然后按投诉描述进行分组,并为每个描述统计投诉数量,然后统计投诉 # 以将当月的投诉总数加起来,并将其粘贴在月页脚中这给出了这样的结果:
2020 03 <= (this is the month group header)
complaint desc | count of complaints/desc
---------------------------------------------
electrical | 2 This section is
cosmetic | 6 in the Complaint_desc
mechanical | 1 group footer
---------------------------------------------
9 <= (this is month group footer)
每个月重复该组
这一切都很好。我想要做的是按 count(complaint#) 的降序对投诉 desc 组中的记录进行排序,使其看起来像:
2020 03
complaint desc | count of complaints/category
---------------------------------------------
cosmetic | 6
electrical | 2
mechanical | 1
---------------------------------------------
9
但我所做的一切似乎都不起作用,desc 组的内置排序“a on top”覆盖了查询中的排序。添加按投诉# 排序也被忽略。我尝试按计数(投诉#)添加排序并访问告诉我我不能按顺序排列聚合函数(但我认为无论如何它都会被覆盖)。我还尝试按计数(投诉#)分组,也作为分组中的聚合被击落。尝试将complaint_desc 和count(complaint#) 移动到complaint# 组标题中,它搞砸了月页脚中的总计数,并且还拆分了投诉desc 的原始目的......
我真的不认为这种变化会有什么大不了的,但解决方案已经让我回避了一段时间。我已经阅读了类似的问题并尝试遵循示例,但它们并没有达到我的预期结果。
有什么想法吗?
【问题讨论】:
不会使用子查询帮助吗? @UnhandledException 以什么方式?如果我进行子查询并使用它进行排序,我相信 Complaint_Desc 组内置的“A on Top”排序将覆盖它。还是我误解了你的建议? 【参考方案1】:我想通了!感谢@UnhandledException 让我走上正轨。
这就是我所做的: 报告所基于的原始查询包含以下内容:
Design mode:
Field | Year | Month | Complaint_Desc | Complaint# |
Total | Group By | Group By | Group By | Group By |
Sort | | | | |
or in SQL:
SELECT Year, Month, [tbl Failure Mode].[Code description], [Complaint Data Table].[Complaint #]
FROM [tbl Failure Mode] RIGHT JOIN [Complaint Data Table] ON [tbl Failure Mode].[ID code] = [Complaint Data Table].[Failure Mode]
GROUP BY Year, Month, [tbl Failure Mode].[Code description], [Complaint Data Table].[Complaint #];
然后我使用报告的分组和排序功能让它显示我想要的方式,除了我提到的打嗝。
我根据该查询进行了另一个查询:
Design mode:
Field | Year | Month | Complaint_Desc | Complaint# |
Total | Group By | Group By | Group By | Count |
Sort | Descending | Descending | | Descending |
or in SQL:
SELECT [qry FailureMode].Year, [qry FailureMode].Month, [qry FailureMode].[Complaint_description], Count([qry FailureMode].[Complaint #]) AS [CountOfComplaint #], [qry FailureMode].Complaint
FROM [qry FailureMode]
GROUP BY [qry FailureMode].Year, [qry FailureMode].Month, [qry FailureMode].[Code description], [qry FailureMode].Complaint
ORDER BY [qry FailureMode].Year DESC , [qry FailureMode].Month DESC , Count([qry FailureMode].[Complaint #]) DESC;
然后我改变了报告结构:
我消除了 Complaint_Desc 组,将complaint_desc 和CountofComplaint#(现在不是一个函数,而是我的新查询中自己的计算字段)移到了报告的DETAIL 部分。然后我删除了每月页脚中的第二个计数(投诉#),并将其替换为“AccessTotalsCountOfComplaint#”,即=Sum([CountOfComplaint#]),我有权访问自动创建- 在详细信息中单击 CountofComplaint_Desc,滚动到“总计”并单击“总和”。 (我删除了我需要的月份组页脚之外的额外 AccessTotalsCountOfComplaint#...)
瞧瞧
我希望这对其他人有所帮助,并再次感谢 Unhandled Exception 为我指明了正确的方向。
【讨论】:
这几乎就是我的意思。据我了解,您使用两个单独的 Microsoft Access 查询对象。我本来想在一个查询中同时使用两者,所以使用子查询。我的意思是这也是可能的。但最终结果是一样的。很高兴你让它工作了。 我明白你在说什么。你是对的,我现在有 2 个查询对象。完全披露:我对子查询没有太多经验;所以这不是我的想法马上去的地方。当你指出方法的时候,我想了想,突然想到,“哦……如果我根据这个再做一个查询……我有我需要的,我需要学习起来,这样我就可以按照你的建议更有效率地做事了。再次感谢!以上是关于访问报告:如何按一个字段分组,但按另一个字段排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?
Java按整数字段对对象数组进行排序,如果它们相同,则按另一个整数值排序