oracle行列转换
来源:互联网 发布:手机移动网络老是断网 编辑:程序博客网 时间:2024/05/22 22:57
1、多行转换单列字符串
比如:
需要转换成:
1 b,z,x
2 c,x
写法1:
SELECT t.rank ,max(substr(sys_connect_by_path(t.name, ','), 2)) FROM (SELECT rank, name, row_number() over(PARTITION BY rank order by rowid ) rn FROM temptest2) tSTART WITH rn = 1CONNECT BY rn = PRIOR rn + 1 AND rank = PRIOR rank GROUP BY t.rank;
sys_connect_by_path会组织一条路径,比如,a,b,c 通过substr再截取会有a
A,b
A,b,c
Max即得到结果
写法2:
select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From temptest2 t GROUP BY t.rank;
2、单列字符串转换成多行
即上面得到的结果再转换回去
写法1:
WITH T AS ( SELECT 1 id1,',tt,aa,bb' c1 from dual UNIONselect 2 id1,',abc,xyz' c1 from dual)select distinct id1,regexp_substr(c1,'[^,]+',1,level) from t CONNECT by level < =length(c1)-length(replace(c1,',',''));
写法2:
WITH T AS ( SELECT 1 id1,',tt,aa,bb' c1 from dual UNIONselect 2 id1,',abc,xyz' c1 from dual)select distinct id1,substr(c1||',',instr(c1||',',',',1,level)+1,instr(c1||',',',',1,level+1) - instr(c1||',',',',1,level)- 1 ),level from t CONNECT by level < =length(c1)-length(replace(c1,',',''));
通过connect by拆分成多行,拆成多少行由逗号决定。之后再通过substr结合level截取
3、多行转换成多列
通过max(case when... )或sum(case when...)
4、多列转换成多行
通过union all
.....
union all
- ORACLE行列转换实例
- oracle 行列转换
- 行列转换 oracle
- ORACLE DB行列转换
- oracle行列转换总结
- oracle 行列转换
- 关于oracle行列转换
- oracle 实现行列转换
- oracle行列转换总结
- Oracle 行列转换 总结
- oracle行列转换总结
- oracle行列转换
- oracle 行列转换
- oracle 行列转换
- oracle 行列转换
- oracle 行列转换
- Oracle 行列转换 总结
- Oracle 行列转换
- 笔记2013.09.18
- 打印文本中的所有单词,并且打印每个单词出现的行号,非实义单词不考虑(TCPL,练习6-3)
- 模拟按键消息
- sharmemory.c(linux下的共享内存使用实例)
- 中国移动SDTP协议中鉴权请求的加密算法
- oracle行列转换
- Backup incremental level and scripts
- CFile类 操作详解
- 绘图基础--画线
- effective c++读书笔记(四)
- USB枚举的详细流程
- No identifier specified for entity
- SQL Server 触发器
- struct 与 typedef struct