方法三:使用自定义函数
create or replace function coltorow(midId INT) RETURN VARCHAR2 is
Result VARCHAR2(1000);
begin
FOR cur IN (SELECT pName FROM tab_name2 t2 WHERE midId=t2.id) LOOP
RESULT:=RESULT||cur.pName||',';
END LOOP;
RESULT:=rtrim(RESULT,',');
return(Result);
-- SELECT t1.*,coltorow(t1.ID) FROM tab_name t1,tab_name2 t2 WHERE t1.ID=t2.ID GROUP BY t1.ID,t1.cname ORDER BY t1.ID;
end coltorow;
SELECT t1.*,coltorow(t1.ID) FROM tab_name t1,tab_name2 t2 WHERE t1.ID=t2.ID GROUP BY t1.ID,t1.cname ORDER BY t1.ID;
create table idtable (id number,name varchar2(30));
insert into idtable values(10,'ab');
insert into idtable values(10,'bc');
insert into idtable values(10,'cd');
insert into idtable values(20,'hi');
insert into idtable values(20,'ij');
insert into idtable values(20,'mn');
select id, name from idtable t;
select id,wmsys.wm_concat(name) name from idtable group by id;
select id,wmsys.wm_concat(name) over (order by id) name from idtable;
select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;
select id,wmsys.wm_concat(name) over (partition by id) name from idtable;
select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;
select replace(wm_concat(name),',','|') from test;
-- 列转行
select a,b,c from
(with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)
select a,b,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,
(select LEVEL lv from dual CONNECT BY LEVEL <= 100) c where c.lv <= t.cnt);
select *
from v_customer_num
where customer_code in ('t_group_01',
't_group_02',
't_group_04',
't_group_03',
't_group_05');
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12961536/viewspace-1061228/
,如需转载,请注明出处,否则将追究法律责任。