You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

代码说明

  1. CTE层级标记:在递归CTE中新增Level字段,标记每个分类节点的层级(当前产品为Level=1,其父类为Level=2,顶级分类为Level最大值)。
  2. 分类节点提取:通过category_parts子查询,分别筛选出顶级分类、当前产品的直接父分类、当前产品,并统计分类链的总长度。
  3. 条件拼接:根据分类链总长度判断展示格式:
    • 若总长度≤2,直接拼接顶级分类与当前产品;
    • 若总长度>2,用...填充中间层级,拼接成目标格式。

内容的提问来源于stack exchange,提问作者Ahmet Arif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:45:54