Access SQL:实现联合查询各自独立排序的方法
让UNION中的两个查询各自独立排序的解决方案
嘿,我懂你现在的需求——你已经用UNION ALL把区域明细统计和总计行拼在了一起,但现在想让明细部分按自己的规则排序,同时让总计行稳稳留在最后,对吧?
直接在整个查询末尾加ORDER BY的话,会把"Total"行也参与排序,肯定不是你想要的效果。这里的关键是给两个子查询分别加一个排序辅助列,用它区分明细行和总计行的优先级,再在外层统一排序。
给你修改后的完整SQL代码:
SELECT region, [% Entered] FROM ( -- 第一个子查询:区域明细统计,标记为排序组1 SELECT region, Round(Sum(IIf([Entered In Portal] = "Y", 1, 0)) / Count(*) * 100, 1) & "%" AS [% Entered], 1 AS sort_order FROM tblITPortalYTD WHERE [Compliance Reporting Month] = Forms!frmMonth!Month GROUP BY region UNION ALL -- 第二个子查询:总计行,标记为排序组2 SELECT "Total" AS region, Round(Sum(IIf([Entered In Portal] = "Y", 1, 0)) / Count(*) * 100, 1) & "%" AS [% Entered], 2 AS sort_order FROM tblITPortalYTD WHERE [Compliance Reporting Month] = Forms!frmMonth!Month ) AS combined_results -- 外层排序:先按sort_order分组(组1在前,组2在后),组内按region排序 ORDER BY sort_order, region;
原理说明:
- 给明细查询加
sort_order = 1,总计查询加sort_order = 2,外层排序时所有明细行会先展示,总计行固定在最后。 - 第二个排序条件
region用来控制明细行内部的排序规则——如果想改成按[% Entered]降序排列,只需要把它换成[% Entered] DESC就行,非常灵活。 - 不需要在子查询内部单独加
ORDER BY,外层的排序条件已经能控制组内顺序,代码更简洁。
如果你的Access版本对嵌套查询有特殊要求,或者需要更复杂的组内排序逻辑,调整第二个排序条件就好~
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

