ITPub博客

oracle中的行转列的一个方法

原创 作者:zflying2000 时间:2008-04-09 10:29:37 0 删除 编辑

http://www.ningoo.net/html/2008/how_to_do_string_aggregate_on_oracle.html#more-326

今天在这里看到一个非常好的方式。使用wmsys.wm_concat() package来进行处理。非常方便。

直接从ningoo那里copy过来,以作为以后查询使用

假如有如下表,其中各个i值对应的行数是不定的

SQL> select * from t;

         I A          D
---------- ---------- -------------------
         1 b          2008-03-27 10:55:42
         1 a          2008-03-27 10:55:46
         1 d          2008-03-27 10:55:30
         2 z          2008-03-27 10:55:55
         2 t          2008-03-27 10:55:59

要获得如下结果,注意字符串需要按照D列的时间排序:

1  d,b,a
2  z,t

 
 
SQL> select i,wmsys.wm_concat(a)
  2  from
  3  (select * from t order by i,d)
  4  group by i;

         I WMSYS.WM_CONCAT(A)
---------- --------------------
         1 d,b,a
         2 z,t

执行计划上看,只需要做一次表扫描就可以了,但是这个函数是加密过的,执行计划并不能显示函数内部的操作。

请登录后发表评论 登录
全部评论

注册时间:2008-01-03

  • 博文量
    13
  • 访问量
    76104