日期:2014-05-17  浏览次数:20763 次

求一字符串处理函数
表A:

ID1 RATE1 ID2 RATE2 ID3 RATE3 ID4 RATE4 ID5 RATE5

总共5对元素,ID代表一种组成成分,RATE代表所含比例(合计100),也可能有的只有2对、3对,剩下的空着,输出的时候将各种成分拼接成字符串 “A 50% / B 30% / C 20%”的格式,并且按成分含量由大到小的顺序排列,含量相同时按成分进行排序,现在数据都有了,也严格符合逻辑,需求是:当5个成分里其中有一个是X的时候,将X变成Y输出,如果原本就包含了Y,那就把X的成分加到Y上面进行输出。当然最好还是符合含量高的放前面的逻辑,必须用函数解决,求一思路方法。

------解决方案--------------------
SQL code
wiht new_A as(
select rowid,ID1 ID,RATE1 RATE from A union all
select rowid,ID2 ,RATE2 from A union all
select rowid,ID3 ,RATE3 from A union all
select rowid,ID4 ,RATE4 from A union all
select rowid,ID5 ,RATE5 from A)
rowid 相同的就是同一条数据
select wm_concat(ID:||RATE||'%/') from 
(select rowid,ID,sum(NVL(RATE)) RATE from
(select rowid,decode(ID,'X','Y') ID,RATE from new_A) 
group by rowid, ID)
group by rowid

缺点wm_concat()连接,它不会按照排序的来。

------解决方案--------------------
探讨

两个楼上实现了相加,不过排序还是有点问题,楼上的结果第4行会乱。

另外有点误会,表里已经有一个字段记录了原始的输出字符串比如:"A 30% / B 25% / Y 25% / X 15% / M 5%"
,现在主要只是需要找到X加到Y中,排序并输出,有没有可能用正则表达式直接处理原始的字符串?