访问报告:如何按一个字段分组,但按另一个字段排序?

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 个查询对象。完全披露:我对子查询没有太多经验;所以这不是我的想法马上去的地方。当你指出方法的时候,我想了想,突然想到,“哦……如果我根据这个再做一个查询……我有我需要的,我需要学习起来,这样我就可以按照你的建议更有效率地做事了。再次感谢!

以上是关于访问报告:如何按一个字段分组,但按另一个字段排序?的主要内容,如果未能解决你的问题,请参考以下文章

按 ID 对多级分组访问报告进行排序

如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?

Java按整数字段对对象数组进行排序,如果它们相同,则按另一个整数值排序

按一个变量排序,按另一个分组,然后在 R 中的 SQL Query 中选择第一行

SQL Server:按分组列求和并按另一列排序

sql - 如何使用其他字段作为排序顺序进行排序?