瀚高数据库实现oracle listagg() ... within group(order by )
Posted 瀚高PG实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瀚高数据库实现oracle listagg() ... within group(order by )相关的知识,希望对你有一定的参考价值。
目录
环境
文档用途
详细信息
环境
系统平台:Microsoft Windows (64-bit) 10
版本:5.6.4
文档用途
本文介绍oracle listagg() … within group(order by )在瀚高数据库中的实现,此版本的数据库已经兼容了listagg()用法,以下详解。
详细信息
一、oracle中例子:
create table orcl_listagg_ivan (la_id number,la_name varchar2(50),la_num number);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高济南1’,1);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高1’,2);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高青岛1’,3);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高成都2’,6);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高青岛2’,5);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高济南2’,4);
insert into orcl_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高2’,7);
commit;
SQL> select * from orcl_listagg_ivan;
LA_ID LA_NAME LA_NUM
1 瀚高济南1 1
1 瀚高1 2
1 瀚高青岛1 3
2 瀚高成都2 6
2 瀚高青岛2 5
2 瀚高济南2 4
2 瀚高2 7
已选择7行。
SQL> select la_id,LISTAGG(la_name,’,’) within group(order by la_num desc) from orcl_listagg_ivan group by la_id;
LA_ID LISTAGG(LA_NAME,',')WITHINGROUP(ORDERBYLA_NUMDESC)
1 瀚高青岛1,瀚高1,瀚高济南1
2 瀚高2,瀚高成都2,瀚高青岛2,瀚高济南2
二、瀚高数据库例子:
create table hgdb_listagg_ivan (la_id number,la_name varchar2(50),la_num number);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高济南1’,1);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高1’,2);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高青岛1’,3);
insert into hgdb_listagg_ivan(la_id, la_num)values(1, 8);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(1, ‘瀚高"4007088006"瀚高’,9);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高成都2’,6);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高青岛2’,5);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高济南2’,4);
insert into hgdb_listagg_ivan(la_id, la_name,la_num)values(2, ‘瀚高2’,7);
1)双引号作为quote字符,转义文本内的双引号,空值使用NULL表示
highgo=# select la_id, string_agg(coalesce(’"’||replace(la_name,’"’,’"’)||’"’,‘NULL’),’,’ order by la_num desc)
from hgdb_listagg_ivan group by la_id;
la_id | string_agg
-------±--------------------------------------------------------------
1 | NULL,"瀚高青岛1","瀚高\\"4007088006\\"瀚高","瀚高1","瀚高济南1"
2 | "瀚高2","瀚高成都2","瀚高青岛2","瀚高济南2"
(2 行记录)
2)不使用QUOTE,直接去除NULL值
highgo=# select la_id,string_agg(la_name,’,’ order by la_num desc) from hgdb_listagg_ivan group by la_id;
la_id | string_agg
-------±-----------------------------------------------
1 | 瀚高青岛1,瀚高"4007088006"瀚高,瀚高1,瀚高济南1
2 | 瀚高2,瀚高成都2,瀚高青岛2,瀚高济南2
(2 行记录)
3)只使用listagg()
highgo=# select la_id,listagg(la_name,’,’) from hgdb_listagg_ivan group by la_id;
la_id | listagg
-------±-----------------------------------------------
1 | 瀚高济南1,瀚高1,瀚高青岛1,瀚高"4007088006"瀚高
2 | 瀚高成都2,瀚高青岛2,瀚高济南2,瀚高2
(2 行记录)
highgo=# select la_id,listagg(la_name) from hgdb_listagg_ivan group by la_id;
la_id | listagg
-------±--------------------------------------------
1 | 瀚高济南1瀚高1瀚高青岛1瀚高"4007088006"瀚高
2 | 瀚高成都2瀚高青岛2瀚高济南2瀚高2
(2 行记录)
因此,如果只是使用了listagg的话是不需要修改的。
更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContent/104fd529047542fe
以上是关于瀚高数据库实现oracle listagg() ... within group(order by )的主要内容,如果未能解决你的问题,请参考以下文章
oracle listagg的 截取长度限制有没有啥方法解决