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

如何在MySQL中完成数据表Unstack(行转列)操作

MySQL 行转列(Unstack)通用解决方案

静态实现(已知所有周期取值场景)

直接用CASE WHEN配合聚合函数实现,比多表关联写法性能更高、逻辑更简洁:

SELECT 
    产品,
    MAX(CASE WHEN 周期 = 'Jan-21' THEN 预测销量 END) AS `Jan-21`,
    MAX(CASE WHEN 周期 = 'Feb-21' THEN 预测销量 END) AS `Feb-21`,
    MAX(CASE WHEN 周期 = 'Mar-21' THEN 预测销量 END) AS `Mar-21`
FROM 原始表名
GROUP BY 产品
ORDER BY 产品;

动态实现(周期动态新增/数量较多场景)

通过MySQL动态SQL自动识别所有周期生成查询语句,无需每次修改SQL结构,扩展性极强:

-- 动态拼接所有周期的查询逻辑
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
    CONCAT(
        'MAX(CASE WHEN 周期 = ''',
        周期,
        ''' THEN 预测销量 END) AS `',
        周期, '`'
    )
) INTO @sql
FROM 原始表名;

-- 拼接完整查询语句
SET @sql = CONCAT('SELECT 产品, ', @sql, ' FROM 原始表名 GROUP BY 产品 ORDER BY 产品');

-- 执行动态语句
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

其他工具实现参考

  • Python Pandas:直接调用内置unstack方法即可完成转换
import pandas as pd
# df为读取原始表得到的DataFrame对象
result_df = df.set_index(['产品', '周期'])['预测销量'].unstack().reset_index()
  • Excel:插入数据透视表,行区域选「产品」、列区域选「周期」、值区域选「预测销量」即可得到目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:45:08