oracle行列转换函数的使用

racle 10g wmsys.wm_concat行列转换函数的使用:

首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用

1、把结果按分组用逗号分割,以一行打印出来。(如果需要换其它的可以用replace函数:replace(wm_concat(name),‘,‘,‘|‘))

select t.u_id,

wmsys.wm_concat(t.goods),

wmsys.wm_concat(t.goods || ‘(‘ || t.u_id || ‘斤)‘)

from tb_index t

group by t.u_id;

2、over(partition by t.u_id)用法:

select t.u_id,  www.2cto.com

wmsys.wm_concat(t.goods || ‘(‘ || t.u_id || ‘斤)‘) over(partition by t.u_id)

from tb_index t;

3、over(order by t.u_id)用法:

select t.u_id,

wmsys.wm_concat(t.goods || ‘(‘ || t.u_id || ‘斤)‘) over(partition by t.u_id)

from tb_index t;

4、懒人扩展用法:(大表很多字段我需要串起来)

select ‘select ‘|| wm_concat(‘t.‘||column_name) || ‘ from TB_INDEX t‘ from user_tab_columns where table_name=‘TB_INDEX‘;

sys_connect_by_path(columnname, seperator) :用来构造树路径的,所以需要和connect by一起来用。

sys_connect_by_path 函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示 

select t.areaid,

t.parentareaid,

t.areaname,

sys_connect_by_path(t.areaname, ‘-‘) area

from tb_index t

start with t.areaname = ‘中国‘

connect by t.parentareaid = prior t.areaid;

www.2cto.com  

listagg:11gr2还新增了一个分析函数LISTAGG,这个函数的功能实现字符串的连接

create table t (id number, name varchar2(30), type varchar2(20));

insert into t

select rownum, object_name, object_type from dba_objects;

select listagg(name, ‘,‘) within group(order by id)

from t

where rownum < 10;

select type, listagg(name, ‘,‘) within group(order by id) name

from t

where type in (‘DIRECTORY‘, ‘JAVA SOURCE‘, ‘SCHEDULE‘)

group by type;

select name,

listagg(name, ‘,‘) within group(order by id) over(partition by type) s_name

from t

where type in (‘DIRECTORY‘, ‘JAVA SOURCE‘, ‘SCHEDULE‘);

时间: 2024-07-30 02:27:09

oracle行列转换函数的使用的相关文章

oracle 行列转换 列名数字

oracle 行列转换列名如果是数字,用双引号包住  如下: --  建表 create table workinfo(wid integer primary key,sid integer ,CONSTRAINT sid foreign key(sid) references student(sid),city nvarchar2(100),-- 就业城市wage number(10,2),-- 月薪workdate date,-- 就业时间eid integer ,CONSTRAINT ei

oracle 行列转换

最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case when.. then.. else.. end) as 语句 这种也可能是我们遇到的第一个行列转换的方法.巧妙的利用汇总和判断语句就可以解决的. 先看一个简单的基础表:如下图 create table STUDENT (   STUNAME      NVARCHAR2(50),   SUBJECTN

Oracle行列转换的思考与总结

最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case when.. then.. else.. end) as 语句 这种也可能是我们遇到的第一个行列转换的方法.巧妙的利用汇总和判断语句就可以解决的. 先看一个简单的基础表:如下图 create table STUDENT(  STUNAME      NVARCHAR2(50),  SUBJECTNAME

oracle行列转换总结-转载自ITPUB

原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六种情况: *列转行 *行转列 *多列转换成字符串 *多行转换成字符串 *字符串转换成多列 *字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识

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 VAL

[Oracle]行列转换(行合并与拆分)

使用wmsys.wm_concat 实现行合并 在 Oracle  中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示,可以使用函数  wmsys.wm_concat 达成. 这个在上一篇 oracle内置函数 wmsys.wm_concat使用 中也介绍到. 参考这一段 " Case 1: 列转换行. 以一行显示所有员工的名字 select wmsys.wm_concat(NAME) from employee; 结果: user1,user2 " 现在有个问题, 反过来如何显

行列转换函数

PIVOT函数与UNPIVOT函数的运用 PIVOT用于将行转为列,完整语法如下:TABLE_SOURCEPIVOT(聚合函数(value_column)FOR pivot_columnIN(<column_list>)) UNPIVOT用于将列转为行,完整语法如下:完整语法:TABLE_SOURCE UNPIVOT( value_column FOR pivot_column IN(<column_list>)) 以上语法可以理解为value_column字段与pivot_col

Oracle11g 行列转换函数PIVOT and UNPIVOT

作为Oracle开发工程师,推荐大伙看看 PIVOT and UNPIVOT Operators in Oracle Database 11g Release 1 This article shows how to use the new PIVOT and UNPIVOT operators in 11g, as well as giving a pre-11g solution to the same problems. PIVOT UNPIVOT Related articles. PIV

oracle 行列转换的运用

问题: 员工表: A(E_ID,NAME,) 部门表:  B(D_ID,D_NAME) 员工与部门关系:C(ID,E_ID,D_ID) SELECT  A.E_ID,A.NAME ,B.D_NAME FROM A INNER JOIN C ON A.E_ID=C.E_ID INNER JOIN B ON B.D_ID=C.D_ID; 这样查处的记录会出现, 1,张三,研发部 1,张三,市场部 2,李四,销售部 我想查询结果显示成这样: 1,张三,研发部|市场部 2,李四,销售部 3 ... SQ