1、oracle10g下行列转换:
select id,wm_concat(A) name from test3 group by id;
2、oracle9i行列转换:
test表的数据结构
id A
1 a
1 b
1 c
2 aa
2 bb
3 aaa
4 aaaa
sql:
with test1 as (select t.* from test t)
SELECT id,substr(max(sys_connect_by_path(A,',')),2)
FROM (SELECT id,A,rn, LEAD(rn) OVER(PARTITION BY id ORDER BY rn desc) rn1
FROM (SELECT id,A,ROW_NUMBER() OVER(ORDER BY id) rn FROM test1))
START WITH rn1 IS NULL
CONNECT BY rn1 = PRIOR rn
GROUP BY id;
一般行列转换都是复杂SQL得到一个数据块,所以这里用with表示了下。
sql分解:
1、
因为sql都是从内到外执行的,所以第一步肯定是:
with test1 as (select t.* from test t)
SELECT id,A,ROW_NUMBER() OVER(ORDER BY id) rn FROM test1;
结果:多加了一个rn的列,和rownum rn差不多
2、 运用开窗函数等找出父子关系
with test1 as (select t.* from test t)
SELECT id,A,rn, LEAD(rn) OVER(PARTITION BY id ORDER BY rn desc) rn1
FROM (SELECT id,A,ROW_NUMBER() OVER(ORDER BY id) rn FROM test1);
lead:lead(字段1,n) over ([partition by 字段2] order by 字段3),向当前行的前n行提取字段1的值.
data:
id A rn rn1
1 a 3 2
1 b 2 1
1 c 1
2 aa 5 4
2 bb 4
3 aaa 6
4 aaaa 7
这个结果集的rn和rn1列貌似具有父子关系?
3、start with ... connect by prior...
start with:开始遍历的节点
connect by prior:指定节点的父子关系
观察第二步得到的数据,以ID分组的话RN1始终有一个为NULL,rn则是1,2,3...,
so:start with rn1 is null 是必须的。
sys_connect_by_path这个函数是oracle9i出来的。
能对树形结构的某个字段(树枝)进行连接,so 连完后max下在substr等扫尾工作就OK啦。
如果想让多列出数据转行就多加几个substr(max(sys_connect_by_path(A,',')),2)就行。
分享到:
相关推荐
Oracle 9i10g 数据库管理详细
Oracle 9i 10g 11g odbc driver数据库连接驱动
oracle 9i所有版本最新下载链接 直接迅雷下载 Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP ...
oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构
Oracle 9i10g编程艺术
文档简单介绍了关于oracle9i全备份,导入oracle11g时,因blocksize 不一致的处理方式,帮助大家解决此类问题。
Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术 Oracle 9i10g编程艺术
Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer 不用安装Oracle客户端也可以使用PLSQL Developer 绿色! 安全! 轻便! 可靠! 1、本软件可作为简单的Oracle9i客户端...
Oracle 9i10g编程艺术(完全版)
Oracle 9i10g 数据库备份与恢复
Oracle 9i&10g 编程艺术 oracle 数据库开发方面的经典技术书籍
Expert Oracle Database Architecture 9i and 10g Programming Techniques and Solutions Thomas Kyte
高清淅的一本 ORACLE数据库教程的书籍,阅读此书,你将了解到Oracle数据库应用设计的一些重要概念。如果你确实领会了这些思想,相信你肯定也会对所面对的难题“换角度思考”。 IBM的Watson曾经说过:“自始以来,...
Oracle 9i/10g PL/SQL编程详细
Oracle9i、10g、11g编程艺术(中文版).pdf
Oracle 9i、10g、11g通用jdbc驱动包!
oracle9i下载地址, 分三个IOS文件, 加压即可安装.
Oracle9i10g编程艺术
oracle9i&10g oracle9i&10g oracle9i&10g