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
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
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
执行计划上看,只需要做一次表扫描就可以了,但是这个函数是加密过的,执行计划并不能显示函数内部的操作。
使用该package非常方便.
特此记录。
相关连接:
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/42810/viewspace-232230/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/42810/viewspace-232230/