`
ice_walf
  • 浏览: 48851 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

oracle 转置

阅读更多
下面是2种方法
方法1:SYS_CONNECT_BY_PATH , ROW_NUMBER() OVER(PARTITION BY  ..  ORDER BY ..)  , START WITH , CONNECT BY PRIOR 组合使用
方法2:wmsys.wm_concat

例:
table1 中 1个col1对应多个col2,下面我们需要把col2转置如col2字段值为
2
3
4
需要变为 2-3-4 这样的格式,并且col2值是不可枚举的有上千或上万种,这样其他有些通过decode方式的转置就不能实现

使用方法1

SELECT TT.col1,
       '-' || ':' ||
       TO_CHAR(SUBSTR(MAX(SYS_CONNECT_BY_PATH(TT.col2, '-')), 2)) M 
       --这里是为了截取掉 SYS_CONNECT_BY_PATH 在第一个值前加的"-"
  FROM (SELECT T.col1,
               T.col2,
               T.col1 + ROW_NUMBER() OVER(PARTITION BY T.col1 ORDER BY T.col2) RN,
               ROW_NUMBER() OVER(PARTITION BY T.col1 ORDER BY T.col2) RM
        --上面2行用了2次 ROW_NUMBER() 是因为 col1是累加的值所以一个 T.col1 + ROW_NUMBER() 是为了区别不同的分组,ROW_NUMBER() 这个是为了设置递归的起始值,但对于不同的分组都会有这个值"1"所以需要使用2个
          FROM table1 T
         WHERE /*T.col1 = TO_NUMBER('1013010875782363')*/) TT  --注释的部分是我测试用的
 START WITH RM = 1
CONNECT BY PRIOR RN + 1 = RN
 GROUP BY TT.col1 ;


使用方法2

select substr(tt.co, 1, length(tt.co) - 1), --去结尾"-"
       tt.col1
  from (select t.col1, replace(wmsys.wm_concat(t.col2 || '-'), ',', null) co --去掉","
          from table1 t
        --WHERE T.col1 = TO_NUMBER('1013010875782363')
         group by t.col1) tt;


第二个虽然简单但是
wmsys.wm_concat对象实现行列转换的方法,这种方法不被Oracle所推荐,因为WMSYS用户用于Workspace Manager,其函数对象可能因版本而不同,这种变化在11.2.0.3及10.2.0.5中体现出来。原本WM_CONCAT函数返回值为VARCHAR2变更为CLOB。这一变化导致了很多程序的异常。
参考
http://www.eygle.com/archives/2012/10/wmsys_wm_concat.html

3种方式 见
http://www.cnblogs.com/blogabc/archive/2013/05/09/3068992.html
分享到:
评论

相关推荐

    sql.txt 存储过程行列转置(oracle)

    oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;

    从Oracle 表格行列转置说起第1/2页

    在Oracle数据库中,进行表格的行列转置是一种常见的数据处理需求,特别是在生成报表或数据分析时。本篇文章将探讨如何利用DECODE函数实现这一操作。DECODE函数是Oracle SQL中的一个非常实用的工具,用于根据指定的...

    oracle行转列较精典的解决方案

    ### Oracle行转列的经典解决方案 在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常...

    Oracle 11G BIDW Chinese Version

    - **SQL增强**:支持SQL转置和增强的物化视图重写,增加了SQL语言的功能性和灵活性。 - **OLAP支持**:简化了OLAP应用的开发过程,提供了更直观的立方体定义、基于成本的汇总算法和更简单的公式定义等特性。 - **...

    Oracle高级sql学习与练习

    6. DECODE函数和行列互换则是对数据进行条件处理和转置的重要工具。DECODE函数类似于IF-THEN-ELSE的逻辑,允许在SQL查询中进行条件判断。 7. CASE表达式是SQL中的条件表达式,类似于编程语言中的switch-case结构,...

    Oracle8i_9i数据库基础

    §8.1.3 DECODE实现表的转置 189 §8.2 关于访问远程数据库 192 §8.2.1 数据库链接 192 §8.2.2 使用同义词获得本地透明 193 §8.2.3 在视图中使用user伪列 194 §8.2.4 使用COPY功能 195 §8.2.5 管理Oracle名称...

    Oracle SQLServer行列转换

    这种方法适用于当已知要转置的具体列名时。以下面的例子为例: - **表结构**: ```sql CREATE TABLE [Scores]( [ID] INT IDENTITY(1,1), [StuNo] INT, [Subject] NVARCHAR(30), [Score] FLOAT ); ``` - *...

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

    在数据库管理领域,Oracle是一种广泛使用的高性能关系型数据库系统。在处理复杂的数据分析和报表时,经常需要进行行列转换,即将表格中的行转化为列或列转化为行,以满足不同的展示和分析需求。本文将深入探讨Oracle...

    matlab导入excel代码-utl_classic_transpose_in_r_and_sas:R和SAS中的经典转置问题。关键字:sa

    join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...

    decode函数借鉴.pdf

    我们可以使用 DECODE 函数来实现表的转置,例如: select sid, serial#, username, decode(command, 0, 'None', 2, 'Insert ', 3, 'Select ', 6, 'Update', 7, 'Delete ', 8, 'Drop', 'Other ') ...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    程序员的SQL金典7-8

     11.9.2 Oracle中的SYS_CONNECT_BY_PATH()函数  11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 ...

    高效数据抽取工具 Kettle使用基础

    Kettle 的主要功能是将数据从来源端经过萃取、转置、加载至目的端的过程。Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。 Kettle 家族...

    matlab代码输入如何换行符-utl_sort_transpose_and_summarize_in_one_proc_v2:在一个过程中对

    join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...

    sql高级进阶

    - 将结果集反向转置为一列:将多行数据合并为单个字段。 - 抑制结果集中的重复值:使用DISTINCT关键字。 - 利用“行转列”进行计算:在转换后的数据上进行分析计算。 - 给数据分组:使用GROUP BY子句对数据进行...

    SQL语句的DECODE和NVL

    此外,DECODE 和 NVL 函数也可以用于实现表的转置。例如,在住房公积金报表置换实例中,可以使用 DECODE 函数将经办行的代码转换为相应的描述信息,然后使用 NVL 函数将 NULL 值转换为指定的值,以便进行进一步的...

    matlab导入excel代码-utl_transposing_and_summarizing_a_matrix_that_lacks_row

    缺少行标识符的转置和汇总矩阵。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS ...

    dbeaver安装及配置.docx

    dbeaver 是一个功能强大的数据库管理工具,支持多种数据库管理系统,包括 MySQL、PostgreSQL、Oracle 等。在本文档中,我们将介绍 dbeaver 的安装和配置过程,以便您快速开始使用 dbeaver 管理您的数据库。 安装 ...

Global site tag (gtag.js) - Google Analytics