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

如何在SQL Server中按行关联分类与对应产品?

在SQL Server中实现分类与产品的关联转换

核心思路

由于ID是严格递增的,每个分类行之后的产品都隶属于该分类,我们可以利用窗口函数,为每个产品行匹配最近的上一个分类行,从而建立分类与产品的关联关系,同时处理原始数据里的名称修正问题。

具体SQL实现

假设你的原始表名为ProductList,包含Item(存储分类/产品名称)和ID两列,执行以下SQL即可得到目标格式:

WITH CategorizedItems AS (
    -- 标记分类行,并为每个行匹配最近的上一个分类名称
    SELECT 
        Item,
        ID,
        -- 筛选分类行,用MAX()窗口函数向前填充分类名称到后续产品行
        MAX(CASE WHEN Item LIKE 'Category-%' THEN Item END) OVER (ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Category
    FROM ProductList
),
CorrectedData AS (
    SELECT
        -- 修正分类名称:替换指定分类的命名
        CASE 
            WHEN Category = 'Category-Phone Accessories' THEN 'Category-Mobile Phone Accessories'
            ELSE Category
        END AS Categories,
        -- 修正产品名称的截断与格式问题
        CASE Item
            WHEN 'Garmin Venu 3 with Silicone B.' THEN 'Garmin Venu 3 with Silicone Band'
            WHEN 'Tile Mate Essential (2022) 4P.' THEN 'Tile Mate Essential (2022) 4-Pack'
            WHEN 'Apple Clear Case iPhone 11Pro' THEN 'Apple Clear Case for iPhone 11Pro'
            ELSE Item
        END AS Products
    FROM CategorizedItems
    -- 过滤掉分类行本身,只保留产品数据
    WHERE Item NOT LIKE 'Category-%'
)
SELECT Categories, Products
FROM CorrectedData
ORDER BY ID;

代码说明

  1. CategorizedItems CTE:先用CASE语句识别分类行,再通过MAX() OVER(ORDER BY ID ...)窗口函数,将分类名称向下填充到后续所有产品行,让每个产品都关联到所属分类。
  2. CorrectedData CTE:处理原始数据里的名称瑕疵,包括调整分类命名、补全/修正产品名称的截断内容。
  3. 最后过滤掉分类行,仅保留产品与分类的关联数据,按ID排序输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:34:55