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

如何使用UNPIVOT将表格列转成行并动态读取列名?

哈哈,这个列转行+动态识别列名的需求太常见了!我给你几个不同场景下的实现方案,全都是自动适配列名、不用手动硬编码的:

1. 数据库场景(以MySQL为例)

如果你的数据存在数据库里,用动态SQL就能自动读取列名并完成转换:

静态示例(先看效果)

先写个硬编码列名的版本让你直观看到结果:

SELECT 'ColA' AS ColumnName, ColA AS Value FROM your_table
UNION ALL
SELECT 'ColB' AS ColumnName, ColB AS Value FROM your_table
UNION ALL
SELECT 'ColC' AS ColumnName, ColC AS Value FROM your_table
UNION ALL
SELECT 'ColD' AS ColumnName, ColD AS Value FROM your_table;

动态版本(自动读取列名)

要是列名经常变或者列太多,用这个动态拼接的SQL,自动从系统表获取列名:

SET @sql = NULL;
SELECT GROUP_CONCAT(
    CONCAT("SELECT '", column_name, "' AS ColumnName, `", column_name, "` AS Value FROM your_table")
    SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.columns
WHERE table_schema = '你的数据库名' AND table_name = '你的表名';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

只要替换数据库名和表名,不管你加多少列,它都会自动处理。

2. Python Pandas场景

处理Excel/CSV这类本地数据的话,Pandas的melt方法简直是为这个需求量身定做的:

import pandas as pd

# 模拟你的原表格数据
df = pd.DataFrame({'ColA': [1], 'ColB': [2], 'ColC': [3], 'ColD': [4]})

# 一键列转行,自动识别所有列名
melted_df = df.melt(var_name='ColumnName', value_name='Value')

print(melted_df)

运行后输出就是你要的格式:

ColumnName  Value
0       ColA      1
1       ColB      2
2       ColC      3
3       ColD      4

哪怕你后续给原表格加了ColE、ColF,这段代码不用改就能直接适配。

3. Excel Power Query场景

要是你用Excel处理数据,用Power Query能实现动态刷新的列转行:

  • 选中你的表格,点击「数据」选项卡 → 「从表格/区域」打开Power Query编辑器
  • 选中所有列,点击「转换」选项卡 → 「逆透视列」→ 选择「逆透视所有列」
  • 关闭并上载到Excel,以后原表格新增列,只要刷新数据,结果会自动更新,完全不用重新操作!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:02