搞不懂思路listagg

create table t_a (
 c1 integer ,
 c2 integer,
 c3 integer,
 sub_id_a integer

)
;
create table t_b (

 sub_id_b integer,
 part_num varchar(10)

)
;
insert into t_a values(1, 2, 3, 4 ),(1, 2 ,2 ,4 ),(2, 3, 4, 5);
insert into t_b values(4 ,'ef'),(4, 'ed' ),(5, 'eg');
insert into t_b values(5, 'eg');

select * from t_b ;


select a.*,
(select listagg(part_num ,',') from t_b where sub_id_a =sub_id_b)
from t_a a ;

 C1     C2     C3     SUB_ID_A     5
 --     --     --     --------     -----
  1     2     3           4    ef,ed
  1     2     2           4    ef,ed
  2     3     4           5    eg

  ;
 
  select a.*,
listagg(part_num ,',')

from t_a a ,t_b
where sub_id_a =sub_id_b
group by a.c1,a.c2,a.c3,a.sub_id_a;

 C1     C2     C3     SUB_ID_A     5
 --     --     --     --------     -----
  1     2     2           4    ef,ed
  1     2     3           4    ef,ed
  2     3     4           5    eg


with temp as (
select   a.*,
part_num

from t_a a ,t_b
where sub_id_a =sub_id_b
)
select c1,c2,c3 ,sub_id_a,
listagg(part_num,',') within group (order by part_num )as part_num

from temp
group by c1,c2,c3 ,sub_id_a
with ur ;

 C1     C2     C3     PART_NUM
 --     --     --     --------
  1     2     2    ef,ed
  1     2     3    ef,ed
  2     3     4    eg


;




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值