当前位置: 代码迷 >> Oracle开发 >> 求一字符串处置函数
  详细解决方案

求一字符串处置函数

热度:97   发布时间:2016-04-24 07:24:56.0
求一字符串处理函数
表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 allselect rowid,ID2 ,RATE2 from A union allselect rowid,ID3 ,RATE3 from A union allselect rowid,ID4 ,RATE4 from A union allselect 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中,排序并输出,有没有可能用正则表达式直接处理原始的字符串?
  相关解决方案