PIVOT用于将列值旋转为列名(即行转列)
今天整理以前的笔记时,发现以前在PPD实习的时候遇到一个场景,感觉很实用所以想记录一下,说不定以后能用到,话不多说,直接上案例:
--表table1
问题编号 时间节点 listing_size TotalAmount
1.1 2014 0-1k 623.900
1.1 2014 10k-50k 62390
1.1 2014 1k-5k 3239.00
1.1 2014 50k+ 623900
1.1 2014 10k-50k 12500
1.1 2014 5k-10k 6239
1.1 2014 5k-10k 8546
1.1 2014 5k-10k 6548
现在想将其转换为如下场景:
问题编号 时间节点 [0-1k],[1k-5k],[5k-10k],[10k-50k],[50k+]
1.1 2014 623.9 *** *** *** ***
代码实现如下:
select 问题编号,时间节点,[0-1k],[1k-5k],[5k-10k],[10k-50k],[50k+]
from table1
PIVOT
(
SUM (TotalAmount) for listing_size in ([0-1k],[1k-5k],[5k-10k],[10k-50k],[50k+])
)tbl
由于现在主要用hive导致很少用sql server了,所以没有运行环境了,但是这个案例绝对可以运行成功~