这段时间这做网站,其中用到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
效果如下:
原创作品,未经允许请勿转载。