SQL实现列转行,并按照月份显示
需求描述
有时候,我们需要把列的数据变成行的数据展示出来,就需要列转行了
如下表 test 月份和数量:我想把它变成展示月份和num的列数的这样一个表,如下
test:
mon num
08 0
08 0
09 0
09 0
09 0
09 0
09 0
09 0
09 0
09 0
09 0
09 0
10 0
10 0
10 0
10 0
10 0
10 0
10 0
10 0
11 0
11 0
10 0
10 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
11 0
转换后:
01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 10 | 10 | 24 | 0 |
解决办法
网上搜索了解决办法,主要包含两种一种是PIVOT语句,另一种是caseh when子句实现,而我是用第一种方法实现的,代码如下:
SELECT * FROM test PIVOT
(
COUNT(num) FOR mon IN('01','02','03','04','05','06','07','08','09','10','11','12')
)
一些解释:
- from后面的可以一个表也可以是 select 语句查询出来的子表
- for前面要使用sum,count等等聚合函数
- in后面是你新排列的行,看了网上说要加[]但是我这里没有加也可以
结果:
参考:
https://blog.csdn.net/weixin_33969116/article/details/94509102
https://www.cnblogs.com/ljhdo/p/4995554.html