idam oracle_oracle中的wm_concat对应达梦的是什么?

本帖最后由 thunder 于 2012-10-17 08:00 AM 编辑

在达梦中,实现类似于oracle的wmsys.wm_concat,完成结果集行列转换,在此总结一下,几种方法:

create table idtable (id int,name varchar(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');

转换前:

ID        NAME

10        ab

10        bc

10        cd

20        hi

20        ij

20        mn

转换后:

ID        NAME

10        ab,bc,cd

20        hi,ij,mn

方法一:--层次查询sys_connect_by_path

select

id,

ltrim(max(sys_connect_by_path(name, ',')), ',')

from

(

select

row_number() over(PARTITION by id ORDER by name) r,

id,

name

from

idtable

)

start

with

r=1 CONNECT by prior r =r-1

and prior id = id

group by

id

order by

id;

方法二:--case..when..then情况表达式,但是按id分组,每组中个数不宜太多

select

id,

max(case when r=1 then name end)+','+

max(case when r=2 then name end)+','+

max(case when r=3 then name end) name

from (

select

row_number() over(PARTITION by id ORDER by name) r,

id,

name

from

idtable )

group by id;

方法三:--decode的函数的使用,但是按id分组,每组中个数不宜太多

select

id,

max(decode(r,1,name))+','+

max(decode(r,2,name))+','+

max(decode(r,3,name)) name

from (

select

row_number() over(PARTITION by id ORDER by name) r,

id,

name

from

idtable )

group by

id;

方法四:--自定义函数(隐式游标)

create or replace function chtorow(chid int)return varchar(1000)

is

declare

result varchar(1000):='';

begin

for cur in (select name from idtable where id=chid) loop

result:=result||','||cur.name;

end loop;

return ltrim(result,',');

end;

select id,chtorow(id) name from idtable group by id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值