原文:http://dacoolbaby.iteye.com/blog/1698957
这是一个Oracle的列转行函数:LISTAGG()
先看示例代码:
- with@H_502_16@temp@H_502_16@as@H_502_16@(@H_502_16@
- select@H_502_16@'China'@H_502_16@nation,'Guangzhou'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@'China'@H_502_16@nation,'Shanghai'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@'China'@H_502_16@nation,'Beijing'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@'USA'@H_502_16@nation,'NewYork'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@'USA'@H_502_16@nation,'Bostom'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@'Japan'@H_502_16@nation,'Tokyo'@H_502_16@cityfrom@H_502_16@dual@H_502_16@
- )@H_502_16@
- select@H_502_16@nation,listagg(city,','@H_502_16@)withinGROUP@H_502_16@(order@H_502_16@by@H_502_16@city)@H_502_16@
- from@H_502_16@temp@H_502_16@@H_502_16@
- group@H_502_16@by@H_502_16@nation@H_502_16@
这是最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
非常方便。
就是over(partition by XXX)
也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:
- with@H_502_16@temp@H_502_16@as@H_502_16@(@H_502_16@
- select@H_502_16@500population,'China'@H_502_16@nation,'Guangzhou'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@1500population,'Shanghai'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@500population,'Beijing'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@1000population,'USA'@H_502_16@nation,'NewYork'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@500population,'Bostom'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
- select@H_502_16@500population,'Japan'@H_502_16@nation,'Tokyo'@H_502_16@cityfrom@H_502_16@dual@H_502_16@
- )@H_502_16@
- select@H_502_16@population,@H_502_16@
- nation,@H_502_16@
- city,@H_502_16@
- listagg(city,'@H_502_16@)withinGROUP@H_502_16@(order@H_502_16@by@H_502_16@city)over(partitionby@H_502_16@nation)rank@H_502_16@
- from@H_502_16@temp@H_502_16@@H_502_16@
总结:LISTAGG()把它当作SUM()函数来使用就可以了。