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 9i/10g 数据库管理详细知识点 #### 一、Oracle 9i/10g 概述 - **Oracle 9i** 和 **Oracle 10g** 是Oracle公司推出的两个重要的数据库管理系统版本。这些版本在企业级数据库管理领域具有重要意义。 - *...
ODBC提供了一种标准化的方法,使得开发者可以通过SQL来访问各种数据库,包括Oracle 9i、10g和11g版本。 Oracle 9i ODBC驱动程序是针对Oracle 9.2版数据库设计的,它支持JDBC(Java Database Connectivity)和ODBC...
Oracle 9i与10g是Oracle数据库的两个重要版本,它们在数据库管理、SQL查询、存储过程编写、性能优化等方面都有丰富的知识等待探索。Oracle数据库是全球广泛使用的大型关系型数据库系统,尤其在企业级应用中占据主导...
### Oracle 10g 数据导入到 Oracle 9i 解决方案 #### 背景介绍 在进行数据库迁移时,可能会遇到将Oracle 10g中的数据迁移到Oracle 9i的情况。由于Oracle 9i与Oracle 10g之间存在版本差异,这可能涉及到一些兼容性...
### Oracle 9i 全备份导入到 11g 的处理方法 #### 一、问题背景 当将Oracle 9i的数据全备份导入到Oracle 11g版本时,经常会遇到由于`db_block_size`参数不一致导致的导入失败问题。这种情况下,如果直接进行导入...
Oracle 9i、10g、11g通用JDBC驱动包是Oracle公司为Java开发者提供的数据库连接驱动,使得Java应用程序能够与Oracle数据库进行交互。这些驱动程序遵循Java Database Connectivity (JDBC) API规范,是Java平台上的标准...
Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer 不用安装Oracle客户端也可以使用PLSQL Developer 绿色! 安全! 轻便! 可靠! 1、本软件可作为简单的Oracle9i客户端...
根据提供的标题、描述、标签及部分内容,我们可以整理出关于Oracle 9i的多个关键知识点,主要包括不同操作系统下的版本、下载链接以及如何获取这些资源的方法。 ### Oracle 9i概述 Oracle 9i 是甲骨文公司(Oracle ...
Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统之一,其9i和10g版本在21世纪初尤其流行。这两个版本引入了许多创新特性,增强了数据库的性能、可用性和可扩展性。以下是对"Expert Oracle Database ...
### Oracle 9i/10g 数据库备份与恢复知识点详解 #### 一、Oracle 9i/10g 数据库备份与恢复概览 **标题与描述**中提到的“Oracle 9i/10g 数据库备份与恢复”是指在Oracle 9i和10g版本中进行数据库备份和恢复的过程...
### Oracle 9i/11g 历史库升级迁移数据至 19c CDB #### 背景介绍 随着业务的发展和技术的进步,企业数据库系统面临着更新换代的需求。本文档主要介绍了如何将Oracle 9i/11g的历史数据库升级并迁移数据至Oracle 19c...
《Oracle 9i&10g 编程艺术》是一本专为数据库开发人员精心编写的经典技术书籍,它深入浅出地介绍了Oracle 9i和10g这两个版本的编程技术和最佳实践。Oracle数据库是全球广泛使用的数据库管理系统之一,尤其在企业级...
Oracle 9i 物理结构是数据库管理系统的核心组成部分,它决定了数据如何在磁盘上存储、管理和访问。Oracle 9i 物理结构主要由以下几个关键组件构成: 1. **数据文件 (Data Files)**: 扩展名为 .DBF 的数据文件是...
Oracle9i客户端精简版。 Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版
Oracle 9i客户端精简版是一款专为数据库测试和数据检查设计的应用,它提供了一个轻量级的解决方案,便于快速安装和使用。这个版本优化了内存占用,节省了磁盘空间,使得用户能够迅速地进行数据库连接、查看表结构...
由于其资源占用较小,因此特别适合这些环境下使用,同时也能连接到更高版本的Oracle数据库,如10g和11g。 Oracle 9i客户端主要包含以下组件和功能: 1. **Oracle Net Services**:这是客户端与服务器通信的核心...
Windows Server 2003 Oracle9i 安装指南 Windows Server 2003 是微软公司推出的服务器操作系统,而 Oracle9i 是 Oracle 公司推出的关系数据库管理系统。本文档将指导读者在 Windows Server 2003 上安装 Oracle9i ...
Oracle 9i和10g是Oracle数据库的两个重要版本,它们在数据库管理、SQL查询、PL/SQL编程以及性能优化方面提供了丰富的功能。在这本《Oracle 9i10g编程艺术》中,读者可以深入理解这两个版本的精髓。 Oracle 9i,全称...
Oracle9i、10g、11g编程艺术(中文版).pdf