mysql列转行和行转列
列转行:
先看未转换前的查询结果:假设这条查询sql为 String sql = s;
期望结果:
转换语句:
方案1:
SELECT organization, SUM( IF ( month = '4', num, 0 ) ) AS '4月',
SUM( IF ( month = '5', num, 0 ) ) AS '5月',
SUM( IF ( month = '6', num, 0 ) ) AS '6月',
SUM( IF ( month = '7', num, 0 ) ) AS '7月',
SUM( IF ( month = '8', num, 0 ) ) AS '8月',
SUM( IF ( month = '9', num, 0 ) ) AS '9月'
FROM (
s ) tt GROUP BY organization
方案2:
SELECT organization, Max(CASE WHEN `month` = 4 THEN num ELSE 0 END) as "4月", Max(CASE WHEN `month` = 5 THEN num ELSE 0 END) as "5月", Max(CASE WHEN `month` = 6 THEN num ELSE 0 END) as "6月", Max(CASE WHEN `month` = 7 THEN num ELSE 0 END) as "7月", Max(CASE WHEN `month` = 8 THEN num ELSE 0 END) as "8月", Max(CASE WHEN `month` = 9 THEN num ELSE 0 END) as "9月" FROM ( s ) tt GROUP BY organization
行转列:假设上一条的查询语句为 string sql = a;
SELECT organization, "4月" as `month`, 4月 number from( a )x where x.4月 > 0 UNION SELECT organization, "5月" as `month`, 5月 number from( a )x where x.5月 > 0
......
结果:
- 行转列,通常是需要将信息汇总展示,每行展示更多更详细的信息,所以会用到group by分组函数
- 列转行,通常是需要将信息拆分后充足,每行展示的信息减少,但是总行数会增加,通常会用到union合并结果集
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix