问题具体描述如下:
表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语句:
SELECT field1, wm_concat(field2) FROM YourTable GROUP BY field2;
wm_concat() 函数的功能跟MySQL中的group_concat()函数功能相似,这个函数可能在文档中找不到,因此需要在sqlplus中测试后才知道是否支持。
(2)另外的解决方法,如在oracle 10g及后续版本中可以使用以下sql:
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