将来自多行的数据与特殊字符串连接在一起

时间:2015-07-09 14:49:32

标签: sql oracle

我需要在一行中显示与特殊字符串连接的数据。例如

CREATE TABLE vis_tab ( TTid varchar(40), site varchar(40), affected varchar(40));

insert into vis_tab(ttid, site, affected) values ('1', 's1', 'a1');
insert into vis_tab(ttid, site, affected) values ('1', 's1', 'a2');
insert into vis_tab(ttid, site, affected) values ('1', 's2', 'a22');
insert into vis_tab(ttid, site, affected) values ('1', 's2', 'a21');
insert into vis_tab(ttid, site, affected) values ('1', 's1', 'a24');

期望的输出:

RESULT
-------------------------------------------
s1-a1,a2,a24#-#s2-a22,a21

在高级别它应该显示SITE后跟" - "然后所有受影响的服务。然后用# - #(或任何其他)附加结果的下一行,依此类推。

希望我能够以清晰的方式提出我的问题。

1 个答案:

答案 0 :(得分:1)

令人困惑的格式。您想要使用listagg()两次:

select listagg(site || '-' || affectes, '#') within group (order by site)
from (select t.site,
             listagg(affected, ',') within group (order by affected) as affectes
      from vis_tab t
      group by t.site
     ) t;