oracle 列转行

表结构:
1 A
1 B
1 C
2 A
2 B
3 C
3 F
4 D
转换后变成:
1 A,B,C
2 A,B
3 C,F
4 D

第1个回答  2010-07-29
SQL> create table t (a number, b varchar2(10));

表已创建。

SQL> insert into t values(1,'A');

已创建 1 行。

SQL> insert into t values(1,'B');

已创建 1 行。

SQL> insert into t values(2,'A');

已创建 1 行。

SQL> insert into t values(2,'B');

已创建 1 行。

SQL> insert into t values(3,'C');

已创建 1 行。

SQL> insert into t values(3,'F');

已创建 1 行。

SQL> insert into t values(4,'D');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select a,max(decode(c,1,b,null)),
2 max(decode(c,2,b,null)),
3 max(decode(c,3,b,null))
4 from(select a,b,row_number()over(partition by a order by b ) c from t)
5* group by a
SQL> /

A MAX(DECODE MAX(DECODE MAX(DECODE
---------- ---------- ---------- ----------
1 A B
2 A B
3 C F
4 D

SQL>
第2个回答  2010-07-30
假设你的表结构是tb_name(id, remark),则语句如下:

SELECT
a.id,
wm_concat (a.remark) new_result
FROM
tb_name a
group by
a.id本回答被提问者采纳
第3个回答  2010-07-30
SQL> select * from d1;

DEPT NAME
---------- --------------------
1 A
1 B
1 C
2 A
2 B
3 C
3 F
4 D

SQL> select dept,wm_concat(name) name from d1 group by dept;

DEPT NAME
---------- --------------------------------------------------------------------------------
1 A,B,C
2 A,B
3 C,F
4 D
第4个回答  2010-07-30
--c1 为第一列 c2为第二列

SELECT c1, SUBSTR (MAX (SYS_CONNECT_BY_PATH (c2, ',')), 2) NAME
FROM (SELECT c1, c2, rn, LEAD (rn) OVER (PARTITION BY c1 ORDER BY rn) rn1
FROM (SELECT c1, c2, ROW_NUMBER () OVER (ORDER BY c2) rn
FROM 表名))
START WITH rn1 IS NULL
CONNECT BY rn1 = PRIOR rn
GROUP BY c1;

上面语句在10g中跑过,通过,语句从学习笔记中copy过来的,还不理解
想不到还有wm_concat的方法,学习~!
但是wm_concat只能以‘,’隔开,有没有不用replace就能换符号的函数??
相似回答