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合并结果集
posted @   曹伟666  阅读(2340)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示