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

时间:2022-11-29 10:28:24

问题具体描述如下

表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