下面是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
分享到:
相关推荐
oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;
在Oracle数据库中,进行表格的行列转置是一种常见的数据处理需求,特别是在生成报表或数据分析时。本篇文章将探讨如何利用DECODE函数实现这一操作。DECODE函数是Oracle SQL中的一个非常实用的工具,用于根据指定的...
### Oracle行转列的经典解决方案 在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常...
- **SQL增强**:支持SQL转置和增强的物化视图重写,增加了SQL语言的功能性和灵活性。 - **OLAP支持**:简化了OLAP应用的开发过程,提供了更直观的立方体定义、基于成本的汇总算法和更简单的公式定义等特性。 - **...
6. DECODE函数和行列互换则是对数据进行条件处理和转置的重要工具。DECODE函数类似于IF-THEN-ELSE的逻辑,允许在SQL查询中进行条件判断。 7. CASE表达式是SQL中的条件表达式,类似于编程语言中的switch-case结构,...
§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名称...
这种方法适用于当已知要转置的具体列名时。以下面的例子为例: - **表结构**: ```sql CREATE TABLE [Scores]( [ID] INT IDENTITY(1,1), [StuNo] INT, [Subject] NVARCHAR(30), [Score] FLOAT ); ``` - *...
在数据库管理领域,Oracle是一种广泛使用的高性能关系型数据库系统。在处理复杂的数据分析和报表时,经常需要进行行列转换,即将表格中的行转化为列或列转化为行,以满足不同的展示和分析需求。本文将深入探讨Oracle...
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 函数来实现表的转置,例如: select sid, serial#, username, decode(command, 0, 'None', 2, 'Insert ', 3, 'Select ', 6, 'Update', 7, 'Delete ', 8, 'Drop', 'Other ') ...
本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...
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 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。 Kettle 家族...
join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...
- 将结果集反向转置为一列:将多行数据合并为单个字段。 - 抑制结果集中的重复值:使用DISTINCT关键字。 - 利用“行转列”进行计算:在转换后的数据上进行分析计算。 - 给数据分组:使用GROUP BY子句对数据进行...
此外,DECODE 和 NVL 函数也可以用于实现表的转置。例如,在住房公积金报表置换实例中,可以使用 DECODE 函数将经办行的代码转换为相应的描述信息,然后使用 NVL 函数将 NULL 值转换为指定的值,以便进行进一步的...
缺少行标识符的转置和汇总矩阵。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS ...
dbeaver 是一个功能强大的数据库管理工具,支持多种数据库管理系统,包括 MySQL、PostgreSQL、Oracle 等。在本文档中,我们将介绍 dbeaver 的安装和配置过程,以便您快速开始使用 dbeaver 管理您的数据库。 安装 ...