SQL查询如何将指定Other分类固定显示在结果集末尾
解决方案
你只需要在原ORDER BY子句的最前面新增一级排序规则,将归属到Other分类的所有条目(含一级分类本身和它的子分类)统一后置即可,修改后的查询语句如下:
select bn.[ProductId], bn.[Name], bn.[Store], bn.[City], bn.[ZipCode], bn.[ParentId] from [dbo].[ProductName] bn order by -- 新增排序规则:所属一级分类为Other的整体排在最后 case when (case when bn.ParentID is null then bn.Name else (select Name from ProductName parent where parent.ProductId = bn.ParentID) end) = 'Other' then 2 else 1 end, -- 以下保留原有排序逻辑 case when bn.ParentID is null then bn.ProductId else ( select ProductId from ProductName parent where parent.ProductId = bn.ParentID ) end, case when bn.ParentID is null then 1 end desc, bn.ParentID
逻辑说明
- 新增的排序条件会先判断每条记录归属的一级分类名称是不是
Other:如果是就赋值为2,其他分类赋值为1,排序时1在前2在后,就能保证整个Other分类(包括它下面的所有子分类)都固定在所有分类的最后 - 原有排序逻辑完全保留,不会影响除
Other之外的其他分类的排序顺序,也不会破坏子分类挂靠对应父分类的展示规则
内容的提问来源于stack exchange,提问作者Mo_DeWeb
相关产品推荐
相关产品推荐

