问题具体描述如下:
表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 |