ITPub博客

首页 > 数据库 > Oracle > 119

119

原创 Oracle 作者:simkyo 时间:2013-11-27 11:54:23 0 删除 编辑
方法三:使用自定义函数
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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 118
下一篇: 120
请登录后发表评论 登录
全部评论

注册时间:2013-06-20

  • 博文量
    193
  • 访问量
    165525