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

如何将品牌为列的客户排名表转换为排名为列、品牌为值的格式?

表格转换解决方案

针对你遇到的unpivot/pivot后得到计数而非品牌名的问题,核心是要确保透视时聚合的是品牌名称字段,而非默认的数值计数。以下分两种常用场景给出具体操作:

一、SQL实现(以SQL Server为例)

假设原始表名为BrandRank,结构与你提供的一致:

1. 先执行Unpivot(宽表转窄表)

将各品牌列转换为品牌名+排名的行记录,过滤空值:

SELECT CustID, BrandName, RankValue
FROM BrandRank
UNPIVOT (
    RankValue FOR BrandName IN (Brand1, Brand2, Brand3, Brand4, Brand5, Brand6, Brand10)
) AS Unpivoted
WHERE RankValue IS NOT NULL

2. 再执行Pivot(窄表转宽表)

这里要指定聚合品牌名称(用MAX/MIN均可,因为每个CustID+RankValue组合对应唯一品牌):

SELECT CustID, [1], [2], [3], [4], [5]
FROM (
    -- 嵌套上面的Unpivot结果
    SELECT CustID, BrandName, RankValue
    FROM BrandRank
    UNPIVOT (
        RankValue FOR BrandName IN (Brand1, Brand2, Brand3, Brand4, Brand5, Brand6, Brand10)
    ) AS Unpivoted
    WHERE RankValue IS NOT NULL
) AS RankData
PIVOT (
    MAX(BrandName) FOR RankValue IN ([1], [2], [3], [4], [5])
) AS Pivoted;

二、Excel Power Query实现

  1. 选中原始表格,点击「数据」选项卡→「从表格/区域」进入Power Query编辑器
  2. 选中CustID列,点击「转换」选项卡→「逆透视列」→「逆透视其他列」,得到三列:CustID、属性(品牌名)、值(排名)
  3. 过滤值列的空值:点击值列筛选器,取消勾选「空」
  4. 点击「转换」选项卡→「透视列」,设置参数:
    • 值列:选择「属性」(即品牌名)
    • 列名:选择「值」(即排名)
    • 高级选项:聚合值函数选择「不要聚合」(因每个客户+排名对应唯一品牌)
  5. 点击「关闭并上载」,即可得到目标表格

问题原因说明

你之前得到计数结果,是因为透视时默认对数值列执行了COUNT聚合,而非针对品牌名称字段进行取值。只要明确聚合的是品牌名称,就能得到正确的转换结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:32:14