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

如何基于固定Brand值使用TSQL的Pivot函数实现行转列?

TSQL实现基于固定Brand值的行转列

针对你需求的行转列场景,因为Brand是固定的有限值(Adidas、Puma),这里提供两种可行的TSQL实现方式:

方法一:条件聚合(推荐,简洁直观)

这种方式通过CASE语句结合聚合函数直接生成目标列,逻辑清晰,适合固定维度的场景:

SELECT 
    Id,
    -- 提取Adidas对应的Brand和Type
    MAX(CASE WHEN Brand = 'Adidas' THEN Brand END) AS [Brand Adidas],
    MAX(CASE WHEN Brand = 'Adidas' THEN Type END) AS [Type Adidas],
    -- 提取Puma对应的Brand和Type
    MAX(CASE WHEN Brand = 'Puma' THEN Brand END) AS [Brand Puma],
    MAX(CASE WHEN Brand = 'Puma' THEN Type END) AS [Type Puma]
FROM YourTableName -- 替换为你的实际表名
GROUP BY Id
ORDER BY Id;

逻辑说明

  • GROUP BY Id将同一Id的多行数据合并为一行
  • CASE语句根据Brand值筛选出对应列的内容,因为每个Id下单个Brand仅对应一条记录,用MAX或MIN聚合函数都能准确获取目标值

方法二:使用Pivot+Unpivot函数

如果偏好使用Pivot语法,可以先通过Unpivot将原表的Brand、Type列转为键值对,再通过Pivot生成目标结构:

WITH UnpivotedData AS (
    SELECT 
        Id,
        -- 拼接属性名与Brand,生成Pivot的目标列名
        CONCAT(Attribute, ' ', Brand) AS TargetColumn,
        AttributeValue
    FROM YourTableName -- 替换为你的实际表名
    -- 将Brand和Type列转为Attribute(属性名)和AttributeValue(属性值)
    UNPIVOT (
        AttributeValue FOR Attribute IN (Brand, Type)
    ) AS Unpvt
)
SELECT 
    Id,
    [Brand Adidas],
    [Type Adidas],
    [Brand Puma],
    [Type Puma]
FROM UnpivotedData
-- 将拼接后的列名转为表头
PIVOT (
    MAX(AttributeValue) FOR TargetColumn IN ([Brand Adidas], [Type Adidas], [Brand Puma], [Type Puma])
) AS Pvt
ORDER BY Id;

逻辑说明

  1. Unpivot阶段:把原表中每个Id对应的Brand、Type列拆成(Attribute, AttributeValue)的键值对,再拼接成Brand Adidas这类目标列名
  2. Pivot阶段:将拼接后的列名转为最终表头,同样用MAX聚合确保每个Id对应列的唯一值被正确提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:15:31