在使用sas进行行转列的字符串合并时,发现sas中并没有合适的方法,而oracle在10g之后包含了WMSYS.WM_CONCAT函数,可以轻松的解决这类问题:select t.rank, t.Name from t_menu_item t;10 CLARK10 KING10 MILLER20 ADAMS20 FORD20 JONES20 SCOTT20 SMITH30 ALLEN30 BLAKE30 JAMES30 MARTIN30 TURNER30 WARD--------------------------------我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数即可以完成 行转列的效果select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From t_menu_item t GROUP BY t.rank;DEPTNO ENAME------ ----------10 CLARK, KING, MILLER20 ADAMS, FORD, JONES, SCOTT, SMITH30 ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD例子如下:SQL> create table idtable (id number,name varchar2(30));Table createdSQL> insert into idtable values(10,'ab');1 row insertedSQL> insert into idtable values(10,'bc');1 row insertedSQL> insert into idtable values(10,'cd');1 row insertedSQL> insert into idtable values(20,'hi');1 row insertedSQL> insert into idtable values(20,'ij');1 row insertedSQL> insert into idtable values(20,'mn');1 row insertedSQL> select * from idtable;ID NAME---------- ------------------------------10 ab10 bc10 cd20 hi20 ij20 mn6 rows selectedSQL> select id,wmsys.wm_concat(name) name from idtable2 group by id;ID NAME---------- --------------------------------------------------------------------------------10 ab,bc,cd20 hi,ij,mnSQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;ID NAME---------- --------------------------------------------------------------------------------10 ab,bc,cd10 ab,bc,cd10 ab,bc,cd20 ab,bc,cd,hi,ij,mn20 ab,bc,cd,hi,ij,mn20 ab,bc,cd,hi,ij,mn6 rows selectedSQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;ID NAME---------- --------------------------------------------------------------------------------10 ab10 ab,bc10 ab,bc,cd20 ab,bc,cd,hi20 ab,bc,cd,hi,ij20 ab,bc,cd,hi,ij,mn6 rows selected个人觉得这个用法比较有趣.SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;ID NAME---------- --------------------------------------------------------------------------------10 ab,bc,cd10 ab,bc,cd10 ab,bc,cd20 hi,ij,mn20 hi,ij,mn20 hi,ij,mn6 rows selectedSQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;ID NAME