Oracle技术:使用分析函数进行行列转换

经常有朋友问到行列转换的问题,留言板上也有这样的提问。

其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询:

SQL> SELECT deptno, ename,

2         ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq

3    FROM emp;

DEPTNO ENAME             SEQ

---------- ---------- ----------

10 KING                1

10 CLARK               2

10 MILLER              3

20 SCOTT               1

20 FORD                2

20 JONES               3

20 ADAMS               4

20 SMITH               5

30 BLAKE               1

30 ALLEN               2

30 TURNER              3

30 WARD                4

30 MARTIN              5

30 JAMES               6

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

14 rows selected.

再结合其他函数进行一下行列转换:

SQL> select deptno,

2  max(decode(seq,1,ename,null)) highest,

3  max(decode(seq,2,ename,null)) second,

4  max(decode(seq,3,ename,null)) third

5  from (

6  select deptno,ename,

7  row_number() over

8  (partition by deptno order by sal desc) seq

9  from emp)

10  where seq <=3 group by deptno

11  /

DEPTNO HIGHEST    SECOND     THIRD

---------- ---------- ---------- ----------

10 KING       CLARK      MILLER

20 SCOTT      FORD       JONES

30 BLAKE      ALLEN      TURNER这个结果基本上还是差强人意的

作者:51cto博客 Oracle小混子

时间: 2024-12-28 04:50:28

Oracle技术:使用分析函数进行行列转换的相关文章

使用分析函数进行行列转换

其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询: SQL> SELECT deptno, ename, 2 ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq 3 FROM emp; DEPTNO ENAME SEQ ---------- ---------- ---------- 10 KING 1 10 CLARK

ORACLE分析函数(6) 使用listagg实现行列转换

listagg函数是在oracle11g中新引入的聚合函数,当然也可以作为分析函数来使用.该函数可以基于分组内特定列的排序,将测量列进行拼接合并. 示例: 在10g中,该函数不被支持 SQL> select prod_id, LISTAGG(cust_first_name||' '||cust_last_name,';') WITHIN GROUP (order by amount_sold) cust_name from sales, customers 2 where sales.cust_

Oracle实现行列转换的方法分析_oracle

本文实例讲述了Oracle实现行列转换的方法.分享给大家供大家参考,具体如下: 1.固定列数的行列转换 如: student subject grade --------- ---------- -------- student1 语文 80 student1 数学 70 student1 英语 60 student2 语文 90 student2 数学 80 student2 英语 100 -- 转换为: 语文 数学 英语 student1 80 70 60 student2 90 80 10

Oracle的行列转换

行列转换包括以下六种情况: 1. 列转行 2. 行转列 3. 多列转换成字符串 4. 多行转换成字符串 5. 字符串转换成多列 6. 字符串转换成多行 首先声明,有些例子需要如下10g及以后才有的知识: A. 掌握model子句, B. 正则表达式 C. 加强的层次查询 1.列转行 CREATE TABLE t_col_row( ID INT, c1 VARCHAR2(10), c2 VARCHAR2(10), c3 VARCHAR2(10)): INSERT INTO t_col_row VA

使用 Oracle XQuery 查询、构建和转换 XML

oracle|xml|转换 在 Oracle 数据库 10g 第 2 版中,Oracle 引入了一个与该数据库集成的全功能自带 XQuery 引擎,该引擎可用于完成与开发支持 XML 的应用程序相关的各种任务.XQuery 是一种用于处理 XML 数据模型的查询语言,它实际上可操作任何类型的可用 XML 表达的数据.尽管 Oracle XQuery 实施使您可以使用数据库数据和外部数据源,但在处理数据库中存储的结构化数据方面,Oracle XML DB 通常可以显著提高性能. 本文提供的示例不仅

[数据库] SQL查询语句表行列转换及一行数据转换成两列

本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法.子查询的应用.decode函数的用法.希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置) 1.创建数据库表及插入数据 创建数据库.创建学生表并设置主键.插入数据代码如下: --创建数据库 create database StudentMS --使用数据库 use StudentMS --创建学生

03. 行列转换写法小结

原文:03. 行列转换写法小结 行列转换,通常有2种方法,一是CASE WHEN/UNION:一是PIVOT/UNPIVOT.对于行值或列数不固定的情况,需要用动态SQL. 一. 行转列 --drop table RowToCol create table RowToCol ( ID int, Code varchar(10), Value int ) Go insert RowToCol select 1,'Item1',1000 union all select 1,'Item2',1000

Oracle优化器:星型转换(Star Query Transformation )

 Oracle优化器:星型转换(Star Query Transformation )  Star query是一个事实表(fact table)和一些维度表(dimension)的join.每个维度表都跟事实表通过主外键join,且每个维度表之间不join. 星型模式设计的好处: 1) 提供了直接.直观的业务实体与终端用户schema设计的映射. 2) 对典型的star query提供了高性能的优化. 3) 通过大量的商业智能工具的广泛支持,可能会期望甚至要求数据仓库架构包含维度表. 星型模式

Oracle技术嘉年华第一天归来

   今天参加了Oracle技术嘉年华,也写一些体会简单说说,不一定都是技术相关.    首先对于我来说,能够参加这个峰会是极大的荣幸,特别感谢盖总对我的信任,所以自己也是高度重视,准备了不少的素材,吸取了在之前演讲中的一些缺点和不足,首先把ppt量降了下来,这样演讲就不会有太多的时间包袱,另一方面加入了更多的素材,可能有些案例,一句话就能说明意思,就不用一一贴出一些日志或者操作步骤来,对于一些需要额外补充道的案例直接给出图形比较效果,可能更加简明扼要.还有就是在公司内部消化了一下,竟然发现了很