首先介绍行转换为列,Oracle行转换为列是比较常见,网上常见的例子如下:grades表:student subject gradestudent1 语文 80student1 数学 70student1 英语 60student2 语文 90student2 数学 80student2 英语 10转换为语文 数学 英语Student1 80 70 60Student2 90 80 100执行语句如下:
- Select student,
-
- sum(decode(subject,"语文",grade,null)) "语文",
-
- sum(decode(subject,"数学",grade,null)) "数学",
-
- sum(decode(subject,"英语",grade,null)) "英语"
-
- from grades
-
- group by student order by student;
- Select student,sum(decode(subject,"语文",grade,null)) "语文",sum(decode(subject,"数学",grade,null)) "数学",sum(decode(subject,"英语",grade,null)) "英语"from gradesgroup by student order by student;
下面,介绍列转换为行的操作:
假设一个表test,记录如下:
表头 id proc1 proc2 proc3
记录 12 3.4 6.7 12.4
想变成如下格式:
表头 id proc value
记录 12 proc1 3.4
记录 12 proc2 6.7
记录 12 proc3 12.4 方法一:采用union all方法(这种方法会随着字段的增多,变得很长,不推荐)
- select id,"proc1",proc1
- from testjac where id=12
- union all
- select id,"proc2",proc2
- from testjac where id=12
- union all
- select id,"proc3",proc3
- from testjac where id=12;
- select id,"proc1",proc1 from testjac where id=12 union all select id,"proc2",proc2 from testjac where id=12 union all select id,"proc3",proc3from testjac where id=12;
方法二:采用decode+系统视图USER_TAB_COLS(推荐):
- select A.id,B.column_name,decode(B.column_name,"PROC1",A.proc1,"PROC2",A.proc2,"PROC3",A.proc3,null) value
- from test A,(select column_name from user_tab_cols where column_id>1 and table_name="TEST") B
Oracle---控制SQL*Plus的环境和数据字典Oracle的归档模式相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)