幽兰生空谷
--绝世独自开

Oracle 中使用union all合并去重数据集,并将相同字段值累加求和

背景:

需求概述:相同客户id的 销售出库单 数量 – 期初销售出库单 数量>0 时,生成推单。

模拟NC实现方式概述:

Tips:令人头大的NC代码~

模拟SQL:

select distinct id, test,num  from (
select distinct 'a' id,3 test,1 num  from dual 
union all
select distinct 'a' id,2 test,-1 num  from dual 
)

根据sql查询到的数据集,生成二维数组

/**
 * 查询返回二位数组
 */
private String[][] getData(String sqlStr) {
String[][] dataArray = null;	
try{
    IUAPQueryBS query = NCLocator.getInstance().lookup(IUAPQueryBS.class);
    List<Object[]> rsList = new ArrayList<Object[]>();
    ArrayListProcessor processor = new ArrayListProcessor();
    rsList= (List<Object[]>)query.executeQuery(sqlStr, processor)	;	
    if (rsList.size()!=0 ){
	int lenrow = rsList.size();
	Object[] firstrow = (Object[])rsList.get(0);
	int lencol = firstrow.length;
	dataArray = new String[lenrow][lencol];	
	for (int i=0;i<lenrow;i++){
		Object[] objs = (Object[])rsList.get(i);
		for (int j=0;j<lencol;j++){
			if (null !=objs[j]){
				dataArray[i][j] = objs[j].toString();	
			}
		} 
	}
   }
}catch(Exception e){
    e.printStackTrace();
    ExceptionUtils.wrappBusinessException(e.getMessage());
 }
return dataArray;
}

取值累加:

HashMap<String, UFDouble> numMap = new HashMap<String, UFDouble>();
String key = null;
UFDouble num = UFDouble.ZERO_DBL;
for(int m=0;m<customerlArray.length;m++){
    key = customerlArray[m][0];
    num = new UFDouble(customerlArray[m][2], 8);
    if(numMap.containsKey(key)){
    numMap.put(key, numMap.get(key).add(num));
    }else{
	  numMap.put(key, num);
	}
}

for(int m=0;m<customerlArray.length;m++){
    if(numMap.get(customerlArray[m][0]).doubleValue()<=0)
    continue;
//省略生成推单的代码
}

如果其他字段值不需要可直接使用SQL简化实现:

--案例:利用union all 合并去重结果集,相同字段值累加求和
select distinct id,sum(num) num  from (
select distinct 'a' id,1 num from dual 
union all
select distinct 'a' id,-1 num from dual 
)
group by id;

结果集:

赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Oracle 中使用union all合并去重数据集,并将相同字段值累加求和》
文章链接:https://www.itheibai.com/archives/1326
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

养成“打赏”的好习惯,从我做起!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册