You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel或SQL中将宽格式数据转换为长格式(附示例)

我来帮你搞定宽格式转长格式的需求,不管用Excel还是SQL都有对应的实现方法,下面给你详细拆解:

用Excel实现宽转长(逆透视)

Excel里有两种常用方法,分别适合不同的数据规模:

方法1:Power Query(推荐,适合大数据量)

这是最便捷的方式,操作步骤如下:

  • 选中你的原始数据区域(要包含表头哦)
  • 点击顶部菜单栏的「数据」选项卡 → 选择「从表格/区域」,弹出的窗口里确认勾选「我的表格有标题」,点击确定进入Power Query编辑器
  • 在编辑器中,先选中ID列(这列是不需要转换的标识列),然后点击「转换」选项卡 → 「逆透视列」→ 选择「逆透视其他列」
  • 这时你会看到列名变成了ID属性,双击这两个新表头,分别改成DATA_TYPEVALUE
  • 最后点击「关闭并上载」,就能得到你想要的长格式数据啦

方法2:公式+手动填充(适合小数据量)

如果数据行数不多,用公式也能快速实现:
假设你的原始数据在A1:D3区域(A列=ID,B列=TOTAL,C列=SCORE,D列=PLAYER):

  • 在F1、G1、H1分别输入IDDATA_TYPEVALUE作为新表头
  • F2单元格输入公式:=INDEX($A$2:$A$3,INT((ROW()-2)/3)+1),下拉填充到6行(因为2个ID×3个数据类型)
  • G2单元格输入公式:=INDEX($B$1:$D$1,MOD(ROW()-2,3)+1),下拉填充
  • H2单元格输入公式:=INDEX($B$2:$D$3,INT((ROW()-2)/3)+1,MOD(ROW()-2,3)+1),下拉填充
    完成后就能得到目标格式的数据了
用SQL实现宽转长(UNPIVOT/UNION ALL)

SQL里分两种场景,取决于你的数据库是否支持UNPIVOT语法:

场景1:数据库支持UNPIVOT(如SQL Server、Oracle、PostgreSQL 11+)

直接用UNPIVOT语法一步到位:

SELECT 
    ID,
    DATA_TYPE,
    VALUE
FROM 
    你的表名
UNPIVOT (
    VALUE FOR DATA_TYPE IN (TOTAL, SCORE, PLAYER)
) AS unpvt_result;

解释一下:VALUE是转换后的数值列名,DATA_TYPE是类型列名,IN()里面列出需要转换的宽表列名。

场景2:数据库不支持UNPIVOT(如MySQL 8.0之前版本)

UNION ALL把每个列拆成单独的行:

SELECT ID, 'TOTAL' AS DATA_TYPE, TOTAL AS VALUE FROM 你的表名
UNION ALL
SELECT ID, 'SCORE' AS DATA_TYPE, SCORE AS VALUE FROM 你的表名
UNION ALL
SELECT ID, 'PLAYER' AS DATA_TYPE, PLAYER AS VALUE FROM 你的表名
ORDER BY ID, DATA_TYPE;

ORDER BY可以让同一个ID的行集中显示,看起来更整洁。

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

火山引擎 最新活动