SQL Server层级分类简化显示:如何用省略号替代中间层级
调整SQL实现分类层级简化展示
需求说明
需要将产品完整分类链(如 iPhone 6 → Apple → Mobile Phones → Electronics)简化为仅显示顶级分类、当前产品的直接父分类、当前产品,中间层级用...替代,最终格式为 Electronics / ... / Apple / iPhone 6;若分类链长度≤2(仅当前产品+顶级分类),则直接拼接两者。
调整后的SQL代码
WITH cte AS ( SELECT a1.*, 1 AS Level FROM dbo.viewFeatureProductCategory a1 WHERE a1.Id = 1000184 UNION ALL SELECT a2.*, c.Level + 1 AS Level FROM dbo.viewFeatureProductCategory a2 JOIN cte c ON a2.Id = c.ParentId ), category_parts AS ( SELECT -- 提取顶级分类(层级数最大的节点) MAX(CASE WHEN Level = (SELECT MAX(Level) FROM cte) THEN Name END) AS TopCategory, -- 提取当前产品的直接父分类(层级数为2的节点) MAX(CASE WHEN Level = 2 THEN Name END) AS ParentCategory, -- 提取当前产品(层级数为1的节点) MAX(CASE WHEN Level = 1 THEN Name END) AS CurrentProduct, -- 获取分类链总长度 COUNT(*) AS TotalLevels FROM cte ) SELECT CASE WHEN TotalLevels <= 2 THEN CONCAT(TopCategory, ' / ', CurrentProduct) ELSE CONCAT(TopCategory, ' / ... / ', ParentCategory, ' / ', CurrentProduct) END AS SimplifiedCategoryPath FROM category_parts;
代码说明
- CTE层级标记:在递归CTE中新增
Level字段,标记每个分类节点的层级(当前产品为Level=1,其父类为Level=2,顶级分类为Level最大值)。 - 分类节点提取:通过
category_parts子查询,分别筛选出顶级分类、当前产品的直接父分类、当前产品,并统计分类链的总长度。 - 条件拼接:根据分类链总长度判断展示格式:
- 若总长度≤2,直接拼接顶级分类与当前产品;
- 若总长度>2,用
...填充中间层级,拼接成目标格式。
内容的提问来源于stack exchange,提问作者Ahmet Arif
相关产品推荐
相关产品推荐

