oracle中如何把表中具有相同值列的多行数据合并成一行

问题具体描述如下

表A记录如下:

A 1

A 2

B 1

B 2

如何根据表A生成新表B:

A 1 2

B 1 2

如何用oracle sql语句将表A的记录生成表B?

(1)根据oracle的不同版本将有不同的做法,如果当前oracle版本支持wm_concat()

函数,那么可以使用以下oracle sql语句:

 

1

SELECT field1, wm_concat(field2) FROM YourTable GROUP BY field2;

wm_concat() 函数的功能跟MySQL中的group_concat()函数功能相似,这个函数可能在文档中找不到,因此需要在sqlplus中测试后才知道是否支持。

(2)另外的解决方法,如在oracle 10g及后续版本中可以使用以下sql:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

SELECT  *

FROM    (

        SELECT  *

        FROM    mytable

        MODEL

        PARTITION BY

                (grouper)

        DIMENSION BY

                (ROW_NUMBER() OVER (PARTITION BY grouper ORDER BY id) AS rn)

        MEASURES

                (val, val AS group_concat, 0 AS mark)

        RULES SEQUENTIAL ORDER (

                group_concat[rn > 1] ORDER BY rn = group_concat[CV() - 1] || ', ' || val[CV()],

                mark[ANY] ORDER BY rn = PRESENTV(mark[CV() + 1], 0, 1)

                )

        )

WHERE   mark = 1

ORDER BY

        grouper

你可能感兴趣的:(oracle中如何把表中具有相同值列的多行数据合并成一行)