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

其实使用分析函数进行处理是很好的方式,翻一下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
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

这个结果基本上还是差强人意的。

时间: 2024-08-04 10:49:16

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

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

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

行列转换

转换 1. 行列转换--普通 假设有张学生成绩表(CJ)如下 [姓名]  [学科]  [成绩]张三    语文    80 张三    数学    90 张三    物理    85 李四    语文    85 李四    数学    92 李四    物理    82王五    数学    60 想变成     [姓名] [语文] [数学] [物理]张三   80     90     85 李四   85     92     82王五   null   60     null decla

在WPS中用转置实现表格行列转换

有时,我们需要将已经做好的表格的行.列对调一下,手工转换不仅费时费力,还容易出错,那有没有更简单也更可靠的方式实现表格中的行列转换呢? 方法一:用WPS表格的"选择性粘贴"实现转换. 在WPS表格2005中,选中整个表格,复制到剪贴版,然后将光标置于空白处,从菜单中点选"编辑-选择性粘贴",在弹出的对话框中选中"转置"(图1),确定后即把整个表格"翻了个个儿"粘贴到指定位置了(图2).如果要转换的是WPS文字中的表格,可以先在

Excel 2007中数据的行列转换

许多时候我们都会在Microsoft的Excel 2007中汇总处理一些表格,可是,在汇总的时候常会遇到这样一个问题:各个表格的排序结果有的是竖排,有的是横排.往一块儿汇总势必得按同一种方式排列才 能排出结果,看来还必须对Excel 2007数据的行列进行转换. 如何进行Excel 2007数据的行列转换呢?难不成得手工一个一个地剪切.粘贴吗?当然不必,Excel 软件早就给我们提供了这个功能.操作如下: 第一步,"选中"要转换数据的所在区域,然后点击"复制": 第

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

怎么让wps表格实现行列转换

  方法一:用WPS表格的"选择性粘贴"实现转换. 在WPS表格2005中,选中整个表格,复制到剪贴版,然后将光标置于空白处,从菜单中点选"编辑-选择性粘贴",在弹出的对话框中选中"转置"(图1),确定后即把整个表格"翻了个个儿"粘贴到指定位置了(图2).如果要转换的是WPS文字中的表格,可以先在WPS文字中将表格复制.粘贴到WPS表格中,再用上述方法实现. 方法二:利用插件轻松实现 WPS高手初少制作的WPS文字工具栏插件中

excel行列转换如何实现

  excel行列转换如何实现 启动Excel 2010,本例以 Excel 2010为例进行讲解 复制需要转换的所在行内容,如下图所示 选中我们要粘贴的位置 单击右键会看到如图所示的"选择性粘贴" 在该菜单下选中如图所示的按钮实现行转列 最后为大家呈现一张效果图