首页/数据/SQL 速查/用 SUM(CASE) 做行转列透视
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

用 SUM(CASE) 做行转列透视

不依赖专用函数实现行列转换:把要展开的维度值写成 CASE 分支,外层 SUM/COUNT 得到透视表;维度值需提前确定。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT product_id,
       SUM(CASE WHEN month = 1 THEN qty ELSE 0 END) AS m1,
       SUM(CASE WHEN month = 2 THEN qty ELSE 0 END) AS m2,
       SUM(CASE WHEN month = 3 THEN qty ELSE 0 END) AS m3
FROM sales
WHERE year = 2024
GROUP BY product_id;
原理条件求和把行值放到对应列
动态列列数固定需预先知道维度值;动态透视要在应用层拼 SQL
替代PG 可用 crosstab(tablefunc 扩展)

易错点

  • 透视列写死在 SQL 里,维度新增时要改语句,动态需求考虑应用层生成
  • 分组列遗漏会让多维度数据被错误合并,先核对 GROUP BY 粒度

数据来源与参考

  • MySQL 8.0 Reference Manual · CASE
  • PostgreSQL Documentation · CASE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌