oracle和pg行列转换

22 篇文章 3 订阅
21 篇文章 2 订阅

postgresql

--拆
with tmp_table as (
select
	'a' name1,
	'A,B,C,D'::varchar as t )
select
	name1,
	regexp_split_to_table(t, ',') t
from
	tmp_table;
	
--合
select 
	name1,
	string_agg(t,',' order by t) t 
from (
	select 'a' name1,'A' t
	union all 
	select 'a' name1,'B' t
	union all 
	select 'a' name1,'C' t
	union all 
	select 'a' name1,'D' t
) a
group by name1;

oracle

--拆
with tmp_table as (
    select
		 'a' name1
		,'A,B,C,D' as t 
	FROM dual
)
SELECT name1,regexp_substr(t,'[^,]+',1,LEVEL) t FROM tmp_table a
CONNECT BY LEVEL <= regexp_count(a.t,'\,\')+1;

--合
SELECT 
    name1,
    listagg(t,',')WITHIN GROUP(ORDER BY t) t 
FROM (
    select 'a' name1,'A' t FROM dual
    UNION ALL 
    select 'a' name1,'B' t FROM dual
    UNION ALL 
    select 'a' name1,'C' t FROM dual
    UNION ALL 
    SELECT 'a' name1,'D' t FROM dual
) a
GROUP BY name1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sqlboy-yuzhenc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值