oracle行转列

本文介绍了在Oracle 11g中进行行转列的两种方法。第一种方式利用REGEXP_SUBSTR函数,适用于Oracle 11g但不支持低版本。第二种方式同样使用REGEXP_SUBSTR,但可能会出现重复数据,通过DISTINCT去除。内容涉及对表的特定条件筛选。

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

第一种方式


Oracle行转列,将一个字段中存在用逗号隔开的数转换成列展示出来
第一种方式
SELECT pacs_doc, regexp_substr(pacs_doc||‘,’, ‘[^,]+’, 1, rownum) yy
from (select pacs_doc from 表名
WHERE pacs_doc like ‘%,%’
and code= ‘1111111111’
) connect by rownum <= length(pacs_doc) - length(replace(pacs_doc, ‘,’, ‘’))+1
在这里插入图片描述

第二种方式

第二种方式(支持oracle 11g,不支持低版本)
SELECT t.apply_id, REGEXP_SUBSTR(t.pacs_doc, ‘[^,]+’, 1, LEVEL) AS mat
FROM 表名 t
where t.code

第三种方式

第三种方式(会出现重复数据)
SELECT DISTINCT REGEXP_SUBSTR(t.pacs_doc, ‘[^,]+’, 1, LEVEL) fkId,
t.apply_id
FROM 表名 t
where t.end_date >= TO_DATE(‘2022-06-01 09:50:51’,‘yyyy-mm-dd hh24:mi:ss’)
AND t.end_date <= TO_DATE(‘2022-06-21 09:50:51’,‘yyyy-mm-dd hh24:mi:ss’)
and state = ‘3’
and t.pacs_doc is not null
CONNECT BY LEVEL <= LENGTH(t.pacs_doc) -
LENGTH(REPLACE(t.pacs_doc, ‘,’, ‘’)) + 1
ORDER BY t.apply_id
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值