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

本文介绍了在Oracle数据库中,如何利用WM_CONCAT函数或者Oracle 10g后的MODEL子句来合并表A的记录,生成新表B。当Oracle版本支持WM_CONCAT时,可以通过GROUP BY语句结合该函数实现;若不支持,则可使用MODEL子句进行复杂的数据聚合操作。
摘要由CSDN通过智能技术生成

问题具体描述如下:

表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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值