MySQL中行转列是很常用的,本文给出了两种行转列的方法。
两张表:
左表:product ,右表:cate


SQL语句:
第一种方法:IF()语句
SELECT cid,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM product GROUP BY cid;
第二种方法:CASE WHEN THEN ELSE END
SELECT cid,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM product GROUP BY cid;
两者得到的结果一样,如下:

当然也可以进行连表查询使用,如下SQL:
方法一:
SELECT c.pname ,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id;
方法二:
SELECT c.pname ,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id
两者得到的结果一样,如下:

需要说明的地方:
方法二中的MAX()是为了能够使用GROUP BY根据cid进行分组,因为每一个cd对应的 mon ='一月份' 的记录只有一条,所以MAX()的值就等于对应那一条记录的num的值。
假如cid='1' 和 mon ='一月份' 的记录有两条,则此时MAX() 的值将会是这两条记录中的最大的值,同理,使用SUM()就是求两者的和。因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。
更多请看:https://www.caohongyuan.cn/article/74
本文介绍MySQL中将行数据转换为列数据的两种方法:使用IF()语句和CASE WHEN THEN ELSE END语句。通过实例展示了如何在单一表格以及联表查询中实现行转列,同时解释了MAX()函数在此过程中的作用。
2万+





