Oracle中的列转行例子详解

数据如下:
name id
张三 1,2,3

要求实现:
name id
张三 1
张三 2
张三 3

--创建临时表
create table tmp as(select ‘张三‘ name, ‘1,2,3‘ id from dual);
--写法1
select name,regexp_substr(id,‘[^,]+‘,1,level) as id
from tmp
connect by level <= regexp_count(id,‘,‘)+1
order by id

--写法2:
select name,trim(regexp_substr(id,‘[^,]+‘,1,level)) as id
from tmp
connect by name = prior name
and prior dbms_random.value is not null
and level <= length(regexp_replace(id, ‘[^,]‘))+1;

--写法3
select name,
--regexp_replace(id,‘(\w+)\,(\w+)\,(\w+)‘,level) id
regexp_replace(id,‘(\w+)\,(\w+)\,(\w+)‘,‘\‘||to_char(level)) id
from tmp
connect by level <= regexp_count(id,‘,‘)+1;

--写法4:
select name,
substr(‘,‘||id||‘,‘,instr(‘,‘||id||‘,‘, ‘,‘, 1, level) + 1, instr(‘,‘||id||‘,‘, ‘,‘, 1, level + 1) -( instr(‘,‘||id||‘,‘, ‘,‘, 1, level) + 1))
from tmp
connect by level <= regexp_count(id,‘,‘)+1
order by level

此外,列转行还可以使用union all和unpivot(oracle 11g新特性)等,待后续补充

时间: 2024-10-08 19:39:51

Oracle中的列转行例子详解的相关文章

Oracle中常用的to_Char用法详解

Oracle中常用的to_Char用法详解(有FMT的详细列表) The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return '1210.7' to_char(1210.73, '9,999.99') would return '1,210.73' to_char(1210.73, '$9,999.00') would return '$1,210.73'

Oracle中组合索引的使用详解(转)

在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引.在组合索引的使用方面,Oracle有以下特点: 1. 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的where子句中时,才会使用到该索引: 2. 在使用Oracle9i之前的基于成本的优化器(CBO)时, 只有当组合索引的前导列出现在SQL语句的where子句中时,才可能会使用到该索引,这取决于优化器计算的使用索引的成本和使用全表扫描的成本,Oracle会自动选择成本低的访问路径(请见下面的测试1和

oracle中exp,imp的使用详解

基本语法和实例: 一.EXP:       有三种主要的方式(完全.用户.表) 1.完全:           EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y           如果要执行完全导出,必须具有特殊的权限 2.用户模式:           EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC           这样用户SONIC的所有对象被输出到

Oracle中rownum机制原理&amp;用法详解

首先我要先感谢小月导师(导师Q:2901583663) 我今年29岁,来自西北的一个小县城. 我习惯了穷苦的日子,在初中还没毕业的时候,我跟着亲戚去了广东深圳打工.刚到深圳的时候,我被眼前的高楼大厦惊呆了!原来大城市是这样的繁华!我从那一刻开始,心里面下了一个决定:一定要出人头地,不能被人看不起. 我先是去了一家茶餐厅打工,那时候茶餐厅都是土豪喝的,看着他们西装革履,气质文雅,我打心里有点敬畏他们,所以对待客人的时候我都是毕恭毕敬.让我在服务员生涯中印象最深的一次是,那是一个冬天天气很冷,我穿的

jquery.dataTables插件使用例子详解

DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HTML表格 效果图 代码 <!doctype html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>jquery.dataTables插件</title>     <link rel

Oracle之外键(Foreign Key)用法详解(一)

Oracle外键(Foreign Key)用法详解(一) 1.目标 演示如何在Oracle数据库中使用外键 2.什么是外键? 1)在Oracle数据库中,外键是用来实现参照完整性的方法之一.打个形象的比喻,外键是指定义外键的表的列的值必须在另一个表中出现. 2)被参照的表称之为父表(parent table),创建外键的表称之为子表(child table).子表中的外键关联了父表中的主键. 3)外键可以在创建表时定义或者通过ALTER TABLE语句创建. 3.创建表时定义外键 语法: CRE

Oracle 建表常用数据类型的详解

创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为"1980-13-31". 在Oracle中,常见的数据类型有: 字符串:字符串分为定长类型char和变长类型varchar2. 数字:整数 number(整数位),小数 number(总长度,小数位),只写number,表示无限制. 日期:date类型,可以保存年月日时分秒. 问题:Oracle中为什么字符串类型为varchar2,它与varchar有什么关系?

JDK中的Timer和TimerTask详解

目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedRate 一些注意点 1. Timer和TimerTask Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务. 2.

【Unity编程】Unity中关于四元数的API详解

Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计算Unity旋转.它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值. Unity内部使用四元数来表示所有的旋转. Quaternion是基于复数,并不容易直观地理解. 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自"Transform"),或者用四元数来构造新的旋转(例如,在两次旋转之间平滑插入). 大