准备相关数据,以数据库维护平台中,字段审计表为例,数据记录如下所示:
select * from sys_audit_column;
方法一:使用wmsys.wm_concat
wmsys.wm_concat将字段的值用","来隔开。
select table_name , column_name , ptdb_name , wmsys.wm_concat(audit_code)as audit_code from sys_audit_column groupby table_name , column_name , ptdb_name
上述SQL加上to_char函数进行转换后:
select table_name , column_name , ptdb_name , to_char(wmsys.wm_concat(audit_code))as audit_code from sys_audit_column groupby table_name , column_name , ptdb_name
【WMSYS.WM_CONCAT深入】
select table_name , column_name, ptdb_name,to_char(wmsys.wm_concat(audit_code) over(orderby table_name)) as audit_code from sys_audit_column
在wmsys.wm_concat上加入over函数,结果如下:
方法二:sys_connect_by_path
sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,',')。这个函数使用之前必须先建立一个树,否则无用。
select ptdb_name , table_name , column_name , ltrim(max(sys_connect_by_path(audit_code, ',')), ',') from(select row_number() over(partitionby ptdb_name ,
table_name ,column_name orderby table_name) r,t1.* from sys_audit_column
t1) startwith r = 1CONNECTbyprior r = r - 1groupby ptdb_name, table_name , column_name
方法三:自定义函数
createorreplacefunction getRow(table1 varchar2 , ptdb1 varchar2) RETURNVARCHAR2is
ResultVARCHAR2(1000);
begin
FOR cur IN (SELECT audit_code FROM sys_audit_column t2 WHERE table1 =
t2.table_name and ptdb1 = t2.ptdb_name) LOOP
RESULT := RESULT||cur.audit_code||',';
ENDLOOP;
RESULT:=rtrim(RESULT,',');
return(Result);
end getRow;
调用方法:
select t.table_name , t.column_name, getRow(t.table_name , t.ptdb_name) from sys_audit_column t
相关推荐
很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一、Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用”,”来隔开。 select id,wm_concat(name) from tab_name ...
例如,你可以创建一个伪列,将行号与原列连接起来,然后使用`CONNECT BY`来合并它们。这种方法适用于数据有某种关联性的场景。 4. **自定义PL/SQL函数:** 对于更复杂的情况,可能需要编写自定义的PL/SQL函数来实现...
"Oracle行转列"是数据库查询中常见的一种需求,尤其是在数据分析和报表展示时。这个主题涉及到Oracle数据库中的聚合函数、分析函数以及一些高级SQL技巧。 首先,"行转列"的基本思想是将数据库表中的一列数据转换为...
DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...
在写sql时,经常会有将某列的字段合并起来,比如将某人名下每个月的工资列示,但是每个人只能占一行。 像这种场景,可能用行列转换也能实现,但如果这个月份的信息不固定,就无法使用行列转换了。 oracle10g以后,...
Oracle行转列 Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列...
与SQL中的`||`运算符不同的是,`WM_CONCAT`可以接受多个参数并将它们连接起来形成一个单一的字符串,特别适用于需要合并多个列值的情况。此函数通常用于返回一个由指定的列或表达式组成的列表,其中每个元素之间可以...
在数据库管理与开发过程中,经常会遇到需要将表中的两列数据合并为一列的情况。这种需求常见于数据清洗、报表生成或数据展示等场景。不同的数据库管理系统(Database Management System,DBMS)提供了各自的方法来...
要将这些列数据转换为行,传统的做法是使用`UNION ALL`来合并多条SELECT语句,但这种方法会导致多次访问数据,从而影响性能。 作者提出了一个创新的解决方案,利用`DECODE`函数配合子查询来实现列转行,以提高查询...
SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常有用,例如在报表生成、数据分析和数据整合等场景中。 在 ...
### Oracle 10g与9i中的多行合并为一行函数详解 在Oracle数据库系统中,经常需要将多个行的数据合并成单行显示,尤其是在处理报告或者需要将多个值组合成一个字符串的情况下。本文将详细介绍如何在Oracle 10g与9i...
### Oracle异库同表名的两个数据库中数据合并或数据表结构的修改 在Oracle数据库管理与维护过程中,经常会遇到需要处理多个不同数据库之间数据同步、数据合并以及表结构更改等问题。本文将针对“Oracle异库同表名的...
在Oracle数据库中,有时我们需要将来自多个表的列合并到一张新表中,以便于数据分析或报表生成。本文将详细讲解如何使用Oracle SQL语句来实现这个目标。 首先,我们回顾一下问题背景:假设我们有两个表,表A和表B,...
### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...
这个例子展示了如何将两个返回相同列的游标合并成一个XML文档,然后可以将这个合并后的XML解析并封装为一个新的`sys_refcursor`返回。通过这种方式,你可以避免复制大量代码,同时保持代码的清晰和可维护性。 总之...
这在你需要将一组相关的列合并为一个或多个行时非常有用。基本语法如下: ```sql SELECT column1, unpivot_column, value FROM table UNPIVOT ( value FOR unpivot_column IN (column2, column3, ...) ); ``` 在...