http://blog.sina.com.cn/s/blog_5c4736800100l2qw.html
方法一:使用wmsys.wm_concat()
SELECT t1.ID,t1.cName,wmsys.wm_concat(t2.pName) FROM tab_name t1,tab_name2 t2 WHERE t1.ID=t2.ID GROUP BY t1.cName,t1.id;
方法二:使用sys_connect_by_path
select id, cName,
ltrim(max(sys_connect_by_path(pName, ',')), ',') from (select row_number()
over(PARTITION by t1.id ORDER by cName) r,t1.*, t2.pName from tab_name t1,
tab_name2 t2 where t1.id = t2.id)
start with r=1 CONNECT by prior r =r-1 and
prior id = id group by id ,cName order by id;
方法三:使用自定义函数
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);
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;
方法1是默认用 逗号,分割
方法2实现自定义 但是看不懂
最后用
select wmsys.wm_concat(ename||'1') from scott.emp
就会用,1 分割