当前位置:  数据库>oracle

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

 
    发布时间:2013-7-11  


    本文导语:  问题具体描述如下:表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语句:S...

问题具体描述如下

表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




相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3