关于oracle重复数据合并以及.前面加0问题的解决

来源:互联网 发布:dvd自动播放软件 编辑:程序博客网 时间:2024/06/04 00:28

这段时间这做网站,其中用到Echars的一些方法,这就涉及到从oracle数据库中获取数据,于是就用到orcale的一些查询的方法,其中这个让重复数据合并的方法十分有用,于是想这这里分享出来,供大家参考。

下面先看看数据库的数据:

   

可以看到其中年份是重复的,我想把相同年份的RDTRQD和JSLY合并,代码如下:

select year, wmsys.wm_concat(RDTRQD) as RDTRQD,wmsys.wm_concat(trim(jsly)) as jsly from ODS10000029 group by year

运行效果如下:



这里用到了 wmsys.wm_concat(字段名)和trim(字段名)方法。wmsys.wm_concat(字段名)作用将需要合并的字段合并成一列,而trim(字段名)是为了消除数据的前后空格问题。但是查询出来了数据还是有问题,其中有几个数据.前面的0不见了,于是数据还是需要进行处理。

在.前面加0有两种方法:

第一种方法是用to_char()方法:select year, wmsys.wm_concat(to_char(RDTRQD,'fm999990.99999')) as RDTRQD from ODS10000029 group by year,它需要设置小数点都后面的位数,而且对整数会有一定的问题,其运行效果如图:

用于整数的结果如下:

对于整数后面会有个小数点这个问题,只需将fm999990.99999改成fm999990.09999这样在整数的小数点后面就会自动补0:

第二种方法是用decode(substr(字段名,1,1),'.','0'||字段名,字段名)的方法,个人比较推荐这种方法, 这个方法的作用就是先判断小数点前面是否有0,如果没有加上0。它对查询的出的整数没有影响,也不用设置小数后面的位数。其查询方法和查询结果如下:

select year, wmsys.wm_concat(decode(substr(RDTRQD,1,1),'.','0'||RDTRQD,RDTRQD)) as RDTRQD from ODS10000029 group by year

综上,对这次数据的处理方法为:select year, wmsys.wm_concat(decode(substr(RDTRQD,1,1),'.','0'||RDTRQD,RDTRQD)) as RDTRQD,wmsys.wm_concat(trim(jsly)) as jsly from ODS10000029 group by year 效果如下:








原创作品,未经允许请勿转载。