create table temp01
(
a varchar(20),
b varchar(20)
) ;
insert into temp01 values ('aa','12||1') ;
insert into temp01 values ('aa','13||4');
insert into temp01 values ('aa','3||66');
insert into temp01 values ('aa','4234||88');
insert into temp01 values ('aa','30||33') ;需要得到结果:
12||1,13||4,3||66,4234||88,30||33
只用简单查询怎么可以做到?谢谢
(
a varchar(20),
b varchar(20)
) ;
insert into temp01 values ('aa','12||1') ;
insert into temp01 values ('aa','13||4');
insert into temp01 values ('aa','3||66');
insert into temp01 values ('aa','4234||88');
insert into temp01 values ('aa','30||33') ;需要得到结果:
12||1,13||4,3||66,4234||88,30||33
只用简单查询怎么可以做到?谢谢
11g吧开始用listagg话说这个listagg() 后面within group()好像是固定写法,干嘛搞这么多关键字还不能缺省,不知道是怎么设计的
从字面就可以理解,这个是组内的顺序。拼接字符串和汇总数字不一样,汇总数值时,先加谁后加谁对结果没有影响,但是拼接字符串,要指定谁在前,谁在后;是啊,这个语法拼接的顺序必须指定,就我而言,接触这个函数时有点别扭的感觉
1、listagg 这名字有点不直观啊,可能是我英语不好
2、within group(order by XXX)的必须固定语法有点长啊,本身也是个分析函数可与over配合用,限制over中order by必须不就得了
3、为什么要必须指定order by呢,如果现实业务并不要求顺序干嘛多此一举呢,像WM_CONCAT一样不就挺好么,毕竟排序的性能代价挺高的
从字面就可以理解,这个是组内的顺序。拼接字符串和汇总数字不一样,汇总数值时,先加谁后加谁对结果没有影响,但是拼接字符串,要指定谁在前,谁在后;是啊,这个语法拼接的顺序必须指定,就我而言,接触这个函数时有点别扭的感觉
1、listagg 这名字有点不直观啊,可能是我英语不好
2、within group(order by XXX)的必须固定语法有点长啊,本身也是个分析函数可与over配合用,限制over中order by必须不就得了
3、为什么要必须指定order by呢,如果现实业务并不要求顺序干嘛多此一举呢,像WM_CONCAT一样不就挺好么,毕竟排序的性能代价挺高的4、而且,他还不支持distinct,你都排序了去重复还很困难吗。。?
wm_concat 的性能的确非常不好,反正也没了,
用人家的产品就得遵循人家的标准啊,嗯嗯