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

MySQL实现长表转宽表(按月份列转换)

MySQL实现长格式数据转宽格式方案

原始长格式数据(假设表名为monthly_data)

Month Type Amount
Jan   B1   951
Feb   B1   1000
Mar   B1   850
Jan   B2   900
Feb   B2   920
Mar   B2   1000

目标宽格式数据

Type Jan Feb  Mar 
B1   951 1000 850
B2   900 920  1000

实现SQL

MySQL没有原生的行转列(PIVOT)函数,我们可以通过聚合函数+条件判断来实现:

方法1:使用CASE语句

SELECT
  Type,
  SUM(CASE WHEN Month = 'Jan' THEN Amount ELSE 0 END) AS Jan,
  SUM(CASE WHEN Month = 'Feb' THEN Amount ELSE 0 END) AS Feb,
  SUM(CASE WHEN Month = 'Mar' THEN Amount ELSE 0 END) AS Mar
FROM monthly_data
GROUP BY Type
ORDER BY Type;

方法2:使用IF函数(更简洁)

SELECT
  Type,
  SUM(IF(Month = 'Jan', Amount, 0)) AS Jan,
  SUM(IF(Month = 'Feb', Amount, 0)) AS Feb,
  SUM(IF(Month = 'Mar', Amount, 0)) AS Mar
FROM monthly_data
GROUP BY Type
ORDER BY Type;

原理说明

  1. 用CASE或IF筛选对应月份的Amount值,非目标月份的数值补0;
  2. 通过SUM聚合函数(如果每个Type+Month组合唯一,用MAX也可以)将同一Type下的各月份值聚合到一行;
  3. 最后按Type分组,得到宽格式的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:10:23