Oracle 列转行函数 Listagg()

前端之家收集整理的这篇文章主要介绍了Oracle 列转行函数 Listagg()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文:http://dacoolbaby.iteye.com/blog/1698957

这是一个Oracle的列转行函数:LISTAGG()

先看示例代码

  1. with@H_502_16@temp@H_502_16@as@H_502_16@(@H_502_16@
  2. 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@
  3. 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@
  4. 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@
  5. 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@
  6. 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@
  7. select@H_502_16@'Japan'@H_502_16@nation,'Tokyo'@H_502_16@cityfrom@H_502_16@dual@H_502_16@
  8. )@H_502_16@
  9. 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@
  10. from@H_502_16@temp@H_502_16@@H_502_16@
  11. 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函数

  1. with@H_502_16@temp@H_502_16@as@H_502_16@(@H_502_16@
  2. 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@
  3. select@H_502_16@1500population,'Shanghai'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
  4. select@H_502_16@500population,'Beijing'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
  5. 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@
  6. select@H_502_16@500population,'Bostom'@H_502_16@cityfrom@H_502_16@dualunion@H_502_16@all@H_502_16@@H_502_16@
  7. select@H_502_16@500population,'Japan'@H_502_16@nation,'Tokyo'@H_502_16@cityfrom@H_502_16@dual@H_502_16@
  8. )@H_502_16@
  9. select@H_502_16@population,@H_502_16@
  10. nation,@H_502_16@
  11. city,@H_502_16@
  12. 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@
  13. from@H_502_16@temp@H_502_16@@H_502_16@

总结:LISTAGG()把它当作SUM()函数来使用就可以了。

原文链接:https://www.f2er.com/oracle/208675.html

猜你在找的Oracle相关文章