listagg用mysql实现_Oracle 11g 列转行listagg

博客介绍了Oracle 11g中使用listagg函数将列转换为行的简单方法,展示了如何通过listagg聚合审批信息,并提供了一个在MySQL中实现类似功能的示例。内容包括创建和填充测试表,以及不同listagg查询的演示,最终通过distinct确保结果的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Oracle 11g之前列转行有些麻烦,11g之后,非常简单。现在有功能的业务是,有一张test的表记录的是单据的审批信息,id为审批信息

在Oracle 11g之前列转行有些麻烦,11g之后,非常简单。现在有功能的业务是,,有一张test的表记录的是单据的审批信息,id为审批信息的主键,sheet_id为外键,是单据的id,remark为审批的内容,在前端的列表页面上,要看到这个单据所有的审批信息,要显示在一个格子里面。

SQL> drop table test purge;

SQL> create table test

(

id number(10),

sheet_id number(10),

remark varchar2(50)

);

SQL> insert into test values(1,100,'审批意见1');

SQL> insert into test values(2,100,'审批意见2');

SQL> insert into test values(3,100,'审批意见3');

SQL> insert into test values(4,200,'同意1');

SQL> insert into test values(5,200,'同意2');

SQL> insert into test values(6,200,'同意3');

SQL> insert into test values(7,300,'回退1');

SQL> insert into test values(8,300,'回退2');

SQL> commit;

SQL> col C_REMARK format a40;

SQL> select sheet_id,listagg(remark,',') within GROUP (order by id) as c_remark

from test

group by sheet_id;

SHEET_ID C_REMARK

---------- ----------------------------------------

100 审批意见1,审批意见2,审批意见3

200 同意1,同意2,同意3

300 回退1,回退2

还有一种写法:

SQL> select sheet_id, listagg(remark, ',') within

GROUP(

order by id) over(partition by sheet_id) c_remark

from test;

SHEET_ID C_REMARK

---------- ----------------------------------------

100 审批意见1,审批意见2,审批意见3

100 审批意见1,审批意见2,审批意见3

100 审批意见1,审批意见2,审批意见3

200 同意1,同意2,同意3

200 同意1,同意2,同意3

200 同意1,同意2,同意3

300 回退1,回退2

300 回退1,回退2

SQL> select distinct sheet_id, listagg(remark, ',') within

GROUP(

order by id) over(partition by sheet_id) c_remark

from test;

SHEET_ID C_REMARK

---------- ----------------------------------------

200 同意1,同意2,同意3

100 审批意见1,审批意见2,审批意见3

300 回退1,回退2

Oracle 11g 新聚集函数listagg实现列转行

本文永久更新链接地址:

logo.gif

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值