listagg函数
2013-11-05 20:17
295 查看
这是一个Oracle的列转行函数:LISTAGG()
注:oracle 11.2才能用
先看示例代码:
Sql代码
1.with temp as(
2. select 'China' nation ,'Guangzhou' city from dual union all
3. select 'China' nation ,'Shanghai' city from dual union all
4. select 'China' nation ,'Beijing' city from dual union all
5. select 'USA' nation ,'New York' city from dual union all
6. select 'USA' nation ,'Bostom' city from dual union all
7. select 'Japan' nation ,'Tokyo' city from dual
8.)
9.select nation,listagg(city,',') within GROUP (order by city)
10.from temp
11.group by nation
with temp as(
select 'China' nation ,'Guangzhou' city from dual union all
select 'China' nation ,'Shanghai' city from dual union all
select 'China' nation ,'Beijing' city from dual union all
select 'USA' nation ,'New York' city from dual union all
select 'USA' nation ,'Bostom' city from dual union all
select 'Japan' nation ,'Tokyo' city from dual
)
select nation,listagg(city,',') within GROUP (order by city)
from temp
group by nation 这是最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
非常方便。
同样是聚合函数,还有一个高级用法:
就是over(partition by XXX)
也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:
Sql代码
1.with temp as(
2. select 500 population, 'China' nation ,'Guangzhou' city from dual union all
3. select 1500 population, 'China' nation ,'Shanghai' city from dual union all
4. select 500 population, 'China' nation ,'Beijing' city from dual union all
5. select 1000 population, 'USA' nation ,'New York' city from dual union all
6. select 500 population, 'USA' nation ,'Bostom' city from dual union all
7. select 500 population, 'Japan' nation ,'Tokyo' city from dual
8.)
9.select population,
10. nation,
11. city,
12. listagg(city,',') within GROUP (order by city) over (partition by nation) rank
13.from temp
with temp as(
select 500 population, 'China' nation ,'Guangzhou' city from dual union all
select 1500 population, 'China' nation ,'Shanghai' city from dual union all
select 500 population, 'China' nation ,'Beijing' city from dual union all
select 1000 population, 'USA' nation ,'New York' city from dual union all
select 500 population, 'USA' nation ,'Bostom' city from dual union all
select 500 population, 'Japan' nation ,'Tokyo' city from dual
)
select population,
nation,
city,
listagg(city,',') within GROUP (order by city) over (partition by nation) rank
from temp
总结:LISTAGG()把它当作SUM()函数来使用就可以了。
注:oracle 11.2才能用
先看示例代码:
Sql代码
1.with temp as(
2. select 'China' nation ,'Guangzhou' city from dual union all
3. select 'China' nation ,'Shanghai' city from dual union all
4. select 'China' nation ,'Beijing' city from dual union all
5. select 'USA' nation ,'New York' city from dual union all
6. select 'USA' nation ,'Bostom' city from dual union all
7. select 'Japan' nation ,'Tokyo' city from dual
8.)
9.select nation,listagg(city,',') within GROUP (order by city)
10.from temp
11.group by nation
with temp as(
select 'China' nation ,'Guangzhou' city from dual union all
select 'China' nation ,'Shanghai' city from dual union all
select 'China' nation ,'Beijing' city from dual union all
select 'USA' nation ,'New York' city from dual union all
select 'USA' nation ,'Bostom' city from dual union all
select 'Japan' nation ,'Tokyo' city from dual
)
select nation,listagg(city,',') within GROUP (order by city)
from temp
group by nation 这是最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
非常方便。
同样是聚合函数,还有一个高级用法:
就是over(partition by XXX)
也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:
Sql代码
1.with temp as(
2. select 500 population, 'China' nation ,'Guangzhou' city from dual union all
3. select 1500 population, 'China' nation ,'Shanghai' city from dual union all
4. select 500 population, 'China' nation ,'Beijing' city from dual union all
5. select 1000 population, 'USA' nation ,'New York' city from dual union all
6. select 500 population, 'USA' nation ,'Bostom' city from dual union all
7. select 500 population, 'Japan' nation ,'Tokyo' city from dual
8.)
9.select population,
10. nation,
11. city,
12. listagg(city,',') within GROUP (order by city) over (partition by nation) rank
13.from temp
with temp as(
select 500 population, 'China' nation ,'Guangzhou' city from dual union all
select 1500 population, 'China' nation ,'Shanghai' city from dual union all
select 500 population, 'China' nation ,'Beijing' city from dual union all
select 1000 population, 'USA' nation ,'New York' city from dual union all
select 500 population, 'USA' nation ,'Bostom' city from dual union all
select 500 population, 'Japan' nation ,'Tokyo' city from dual
)
select population,
nation,
city,
listagg(city,',') within GROUP (order by city) over (partition by nation) rank
from temp
总结:LISTAGG()把它当作SUM()函数来使用就可以了。
相关文章推荐
- 使用LISTAGG函数合并行,使用xmltable获取xmlType数据
- oracle的LISTAGG函数 和 REGEXP_SUBSTR函数的使用
- Oracle中如何使用REGEXP_SUBSTR,listagg函数
- 行列转换之字符串拼接(二)、LISTAGG函数
- oracle listagg函数、lag函数、lead函数 实例
- LISTAGG函数
- oracle listagg函数、lag函数、lead函数 实例
- Oracle11.2新特性之listagg函数 (行列转换)
- listagg函数
- Oracle11.2新特性之listagg函数
- Oracle11.2新特性之listagg函数(多条数据用逗号隔开)
- oracle中的listagg函数
- 11g中利用listagg函数实现自动拼接INSERT语句
- oracle listagg函数、lag函数、lead函数 实例
- Oracle 利用Listagg函数将两行/多行合并成一行
- Oracle11.2新特性之listagg函数
- oracle listagg函数、lag函数、lead函数 实例
- Oracle11.2新特性之listagg函数 (行列转换)
- Oracle11.2新特性之listagg函数 (行列转换)
- oracle--多行转为一行 (listagg函数)