行列转置是常用的一种方法,也是考察sql使用熟练的一个标准,不过还真不好记,这里记录一下,以备查询。
--列转行
oracle中,怎么将数据行列转换,其实这个很简单,在sql的教程里面,就有用decode的做法,但是具有一定的局限性,下面提供这种函数方法,简单的实现了行列转换的分组实现:
--行转列
(待补充)
--列转行
oracle中,怎么将数据行列转换,其实这个很简单,在sql的教程里面,就有用decode的做法,但是具有一定的局限性,下面提供这种函数方法,简单的实现了行列转换的分组实现:
SQL> select * from alan_test2 ;
ID MARK
---------- ------------------------------
001 alan1
001 alan2
001 alan3
002 lee1
002 lee2
---------- ------------------------------
001 alan1
001 alan2
001 alan3
002 lee1
002 lee2
SQL> select id, ltrim(max(sys_connect_by_path(mark, ',')), ',') mark
from (select id,
mark,
min(mark) over(partition by id) mark_min,
(row_number() over(order by id, mark)) +
(dense_rank() over(order by id)) numid
from alan_test2)
start with mark = mark_min
connect by numid - 1 = prior numid
group by id;
from (select id,
mark,
min(mark) over(partition by id) mark_min,
(row_number() over(order by id, mark)) +
(dense_rank() over(order by id)) numid
from alan_test2)
start with mark = mark_min
connect by numid - 1 = prior numid
group by id;
ID MARK
---------- ------------------------------
001 alan1,alan2,alan3
002 lee1,lee2
---------- ------------------------------
001 alan1,alan2,alan3
002 lee1,lee2
--行转列
(待补充)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/759027/viewspace-753949/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/759027/viewspace-753949/