如何整理这个较为复杂的行转列sql语句?

BanJom 发布于 2016/01/30 11:02
阅读 332
收藏 0

使用工具:oracle

所使用的表和关键列:表A:bid,表B:bid,name,time

遇到一个难题,表A跟表B存在一对多的关系,用以对应的列分别是A.bid和B.bid。

B表中有多条bid列相同的纪录,每条纪录都有一个name和time,我要的结果是这样子的:

每条纪录都有两个字段,分别是:A.bid和B.name-B.time,其中B.name-B.time要连在一起。

我知道oracle有一种wm_concat()函数能够帮助,我写的sql语句如下

select A.bid,C.bname,C.btime from A ,  
(select B.bid,wm_concat(B.name) as bname,
wm_concat(B.time) as btime 
from B group by B.bid) C
 where A.bid=C.bid





但是这样的结果显示出来的却是三列,分别是A.bid,B.name,B.time,

而且B.name和B.time虽然是按逗号隔开,但是却并不是有序排列的,导致我想将值取出来后,也不能按照排序功能来将他们重新拼接起来成为一个字符串。

求各位大侠指点指点


加载中
0
yoblue
yoblue

你试着将sql语句改成这样:

select D.bnametime,A.bid from A ,
(select bid,to_char(wm_concat(nametime)) as bnametime from 
(select bid,name||'-'||time as nametime from B) group by bid
)D where A.bid=D.bid



这样name和time就会集合到一条纪录里面,但是取出来后你要将他们用,来解析开后,再用-解析多一遍,再重新组装

BanJom
BanJom
大概理解你的意思,加多条sql后的确可以了~感谢
0
tkl2wf
tkl2wf

oracle里面有两个字符串连接||

b.name ||'-'||b.time  出来的是  name-time

再用 wm_concat(b.name ||'-'||b.time)出来的应该是name-time,name-time,name-time

BanJom
BanJom
试过,报错了,貌似只能是一个属性名在里面,不过还是很感谢~
返回顶部
顶部