oracle sys_connect_by_root,CONNECT_BY_ROOT实现行列转换
10g以下版本的ORACLE可以通过DECODE等实现行列转换,[@more@]ORACLE 10g开始新增的CONNECT_BY_ROOT能比较方便地实现行列转换。
例:
有一表ABC,字段信息包括region(地区),name(国家),population(人口)。
表中记录信息如下:
region name population
A A1 1000
A A2 5000
B B1 2000
B B2 3000
......
要求用sql查询语句实现以下结果:
A_num B_num ......
6000 5000 ......
实现:
SQL>Create Table ABC (
region Char(10),
Name Char(20),
population Number
);
/
SQL>Insert Into ABC Values('A','A1',1000);
/
SQL>Insert Into ABC Values('A','A2',5000);
/
SQL>Insert Into ABC Values('B','B1',2000);
/
SQL>Insert Into ABC Values('B','B2',3000);
/
SQL>Insert Into ABC Values('C','C1',4000);
/
SQL>Select * From ABC;
/
region name population
A A1 1000
A A2 5000
B B1 2000
B B2 3000
C C1 4000
......
SQL>
SELECT
odr,
replace(path,'_','') path
FROM
(SELECT
1 odr,
Count(*) over()-Rownum idx,
path
FROM
(SELECT
SYS_CONNECT_BY_PATH(content, '_') Path
FROM
(SELECT
num,
num1,
content
FROM
( With t As (Select no,nsum,Rownum num From ( Select Distinct REGION no,Sum(POPULATION) over(Partition By REGION ) nsum From ABC ) ) Select num,num+1 num1,no content From t )
) Start With num=1 Connect By NOCYCLE num = Prior num1
)
)
WHERE idx=0
UNION
SELECT
odr,
replace(path,'_','') path
FROM
(SELECT
2 odr,
Count(*) over()-Rownum idx,
path
FROM
(SELECT
SYS_CONNECT_BY_PATH(content, '_') Path
FROM
(SELECT
num,
num1,
content
FROM
( With t As (Select no,nsum,Rownum num From ( Select Distinct REGION no,Sum(POPULATION) over(Partition By REGION ) nsum From ABC ) ) Select num,num+1 num1,to_char(nsum)||' ' content From t )
) Start With num=1 Connect By NOCYCLE num = Prior num1
)
)
WHERE idx=0;
/
odr path
1 A B C
2 6000 5000 4000
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/174388/viewspace-914475/,如需转载,请注明出处,否则将追究法律责任。
oracle sys_connect_by_root,CONNECT_BY_ROOT实现行列转换相关推荐
- oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)
oracle11g开始支持的listagg函数替代了wmconcat来实现行列转换的功能. listagg函数的用法: oracle行列转换例子: -建表https://www.cndba.cn/fo ...
- Oracle如何实现动态行列转换,Oracle实现行列转换的方法分析
本文实例讲述了Oracle实现行列转换的方法.分享给大家供大家参考,具体如下: 1.固定列数的行列转换 如: sql;"> student subject grade -------- ...
- oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)
一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...
- SQL行列转换6种方法
在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...
- 数据透视表sql:用SQL行列转换实现数据透视的一些思考
用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...
- oracle行列转换总结
最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六 ...
- Oracle 行列转换
Oracle 行列转换 1.固定列数的行列转换 如 student subject grade --------- ---------- -------- student1 语文 80 student ...
- Oracle行列转换的思考与总结
最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...
- 用ORACLE分析函数实现行列转换
摘 要 对数据库中的数据用SQL实现行列转换,不但需要编写复杂的程序代码,还需要编写存储过程.若引入ORACLE中的分析函数则会使该过程简便很多.首先找出表中所有关键字的属性个数的最大值,设为n,其次 ...
最新文章
- 守住你的网站:防御DDoS***指南
- Qt for Python 信号和槽的使用详解
- FHS(Filesystem Hierarchy Standard 文件系统层次化标准)
- 数组对象的slice和splice方法
- Problem L. Graph Theory Homework
- Java安装以及环境配置
- Java使用文本编写源代码
- python分析pcap文件_Python-对Pcap文件进行处理,获
- c语言编程输出等腰三角形,C语言输出等腰三角形
- TcaplusDB君 · 行业新闻汇编(五)
- h5活动是什么意思_H5活动页面可以有哪些作用
- Noip2011 Day1 T1 铺地毯(模拟)
- 100W个微信红包封面,人人都能领取到!!!
- MC34063升压电路中常见的几种问题
- Python代码写好了怎么运行?为大家详细讲讲如何运行Python代码
- git恢复commit过的代码
- 数K8S无服务器风流人物,还得看Kubeless
- 启明医疗完成对Keystone Heart有限公司的收购
- SQLite管理软件 - SQLite Developer
- 可以读取html文件,javascript能读取本地文件吗?