tip:先看文章第二节的几篇短博文再看本文更佳
1.概念
不管行转列还是列转行使用时同平时用的group by
一样,一般要结合聚合函数使用(因为列名一定是唯一的,字段里的值并不一定是是唯一的,所以配合聚合函数使用)。(补充说明:行就是我们平时说的一条一条的记录,再具体点就是某一列的具体值;列就是字段,也就是列名)但是group by
并不属于行转列和列转行的一种,不要混淆了,只是使用场景类似都是给你进行分组。补充:group by
可以实现行转列是因为MySQL没有行转列的函数,便可用case when
和group by
配合实现行转列的功能而已。
再通俗点就可以把数据表的行和列看成坐标轴的横轴和纵轴,只不过横轴是固定的,也就是我们平时说的字段名、表头,而纵轴并不是固定的,它可以沿着表头移动。理解了这个就不用怕什么是行转列和列转行了,剩下的就是该行/列的其他字段进行聚合操作了。
2.实现
- oracle:
- 行转列:PIVOT()函数:https://blog.csdn.net/Grady_Ne/article/details/106948554
- 列转行:unpivot()函数:https://blog.csdn.net/shammy_feng/article/details/111921416
tip:看到这可以回去了
- mySQL:
- 行转列:可以使用
group by
配合case when
或者if()
完成:
https://www.csdn.net/tags/NtDaYg2sODQ5MDctYmxvZwO0O0OO0O0O.html
https://blog.csdn.net/m0_37635053/article/details/124393805 - 列转行:使用一个中间表:https://blog.csdn.net/wyqwilliam/article/details/82559023(从四开始看)
- 行转列:可以使用