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实现行列转换相关推荐

  1. oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)

    oracle11g开始支持的listagg函数替代了wmconcat来实现行列转换的功能. listagg函数的用法: oracle行列转换例子: -建表https://www.cndba.cn/fo ...

  2. Oracle如何实现动态行列转换,Oracle实现行列转换的方法分析

    本文实例讲述了Oracle实现行列转换的方法.分享给大家供大家参考,具体如下: 1.固定列数的行列转换 如: sql;"> student subject grade -------- ...

  3. oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)

    一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...

  4. SQL行列转换6种方法

    在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...

  5. 数据透视表sql:用SQL行列转换实现数据透视的一些思考

    用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...

  6. oracle行列转换总结

    最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六 ...

  7. Oracle 行列转换

    Oracle 行列转换 1.固定列数的行列转换 如 student subject grade --------- ---------- -------- student1 语文 80 student ...

  8. Oracle行列转换的思考与总结

    最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...

  9. 用ORACLE分析函数实现行列转换

    摘 要 对数据库中的数据用SQL实现行列转换,不但需要编写复杂的程序代码,还需要编写存储过程.若引入ORACLE中的分析函数则会使该过程简便很多.首先找出表中所有关键字的属性个数的最大值,设为n,其次 ...

最新文章

  1. 守住你的网站:防御DDoS***指南
  2. Qt for Python 信号和槽的使用详解
  3. FHS(Filesystem Hierarchy Standard 文件系统层次化标准)
  4. 数组对象的slice和splice方法
  5. Problem L. Graph Theory Homework
  6. Java安装以及环境配置
  7. Java使用文本编写源代码
  8. python分析pcap文件_Python-对Pcap文件进行处理,获
  9. c语言编程输出等腰三角形,C语言输出等腰三角形
  10. TcaplusDB君 · 行业新闻汇编(五)
  11. h5活动是什么意思_H5活动页面可以有哪些作用
  12. Noip2011 Day1 T1 铺地毯(模拟)
  13. 100W个微信红包封面,人人都能领取到!!!
  14. MC34063升压电路中常见的几种问题
  15. Python代码写好了怎么运行?为大家详细讲讲如何运行Python代码
  16. git恢复commit过的代码
  17. 数K8S无服务器风流人物,还得看Kubeless
  18. 启明医疗完成对Keystone Heart有限公司的收购
  19. SQLite管理软件 - SQLite Developer
  20. 可以读取html文件,javascript能读取本地文件吗?

热门文章

  1. 均胜群英:PC+移动端数字化管理,两年降本7%,人均产值提高300%
  2. 用几张图片教你,财务分析的平台、架构、指标体系、模型
  3. 手把手教你制作好看实用的可视化驾驶舱
  4. 继续完善掼蛋游戏 其次说说朋友的情况
  5. 对于成功的GDUUU商人来说
  6. 如何让我的mfc应用程序可以在最上面?
  7. 如何能能够学好软件编程技术
  8. mysql查询数据不变_mysql之delete删除记录后数据库大小不变
  9. GPS NMEA-0183协议常用数据格式及解析攻略
  10. 346个基因组可视化工具一网打进!