本文主要是介绍Java程序员必须掌握的Oracle关于listagg() WITHIN GROUP()行转列函数的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
所有版本的Oracle软件都可以使用 :
select wm_concat(name) as name from user;
但如果是oracle11g或者以上版本,官方推荐使用以下方法 :
select listagg(name, ',') within group( order by name) as name from user;
这个函数该怎么使用?
首先,建一个表含以下字段 :
列名 | 字段类型 |
---|---|
xType | NUMBER |
City | nvachar2(200) |
然后,为以上MyTest表添加一些样式数据
Insert into MyTest(xType , City) values (1 , ‘北京’)
Insert into MyTest(xType , City) values (1 , ‘上海’)
Insert into MyTest(xType , City) values (1 , ‘广州’)
Insert into MyTest(xType , City) values (2 , ‘武汉’)
Insert into MyTest(xType , City) values (2 , ‘杭州’)
Insert into MyTest(xType , City) values (2 , ‘厦门’)
也可以通过以下这种方式添加
Insert into MyTest (xType , City)
Select 1 , '北京' From dual UNION ALL
Select 1 , '上海' From dual UNION ALL
Select 1 , '广州' From dual UNION ALL
Select 2 , '武汉' From dual UNION ALL
Select 2 , '杭州' From dual UNION ALL
Select 2 , '厦门' From dual UNION ALL
如下图 :
如果使用wm_Concat的模式查询数据
Select xType ,wmsys.wm_concat(to_char(City)) AS xCity From MyTest Group By xType
如果使用官方推荐的listagg形式(必须是oracle11g或者以上的版本)
Select xType ,listagg(to_char(City) , ' , ') within Group (Order By xType) AS xCity From MyTest Group By xType
结果如下图 :
解读 listagg() WITHIN GROUP()函数
Select xType ,listagg(to_char(City) , ’ , ') within Group (Order By xType) AS xCity From MyTest Group By xType
解读 :
listagg(to_char(City) , ’ , ')
行转列函数:将city这列转成一列,每个数据之间以“,”隔开
within Group (Order By xType)
很明显,这是将数据通过xType来分组
AS xCity
作表名
From MyTest
从MyTest表查询
Group By xType
分组查询
总的起来说 : 这句Sql的表达的是
查询MyTest表里xType 列和将City这一列通过xType分组的多项数据用“,”隔开整合的结果查询出来并再次用xType列进行分组
这篇关于Java程序员必须掌握的Oracle关于listagg() WITHIN GROUP()行转列函数的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!