Oracle 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,
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; 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");
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12CentOS下MySQL卸载和安装32个字节限制——Oracle直方图优化相关资讯 Oracle数据库基础教程
- 在Oracle数据库中插入含有&符号的 (03/06/2013 09:20:14)
- Oracle 执行计划更改导致数据加工 (02/13/2013 14:45:04)
- 判断Oracle Sequence是否存在 (02/13/2013 14:32:26)
| - Oracle数据库中无法对数据表进行 (02/26/2013 14:24:58)
- Oracle 在同一台主机上建立用户管 (02/13/2013 14:40:58)
- Oracle em 无法启动,报not found错 (02/13/2013 14:29:48)
|
本文评论 查看全部评论 (0)