今天做开发,需求是
/** * 1.先获取查询lraccount账单表, * 2.查询数据预估表lrlistCollect表, * 3.二者相减存到lrpreAdjust账单调整表 * 4.发送邮件 */
初步就像写的逻辑是
String sql01="select * from Lraccount where month= "; SSRS accoutSSRS = new ExeSQL().execSQL(sql01); String sql02="select * from Lraccount where month= "; SSRS listSSRS = new ExeSQL().execSQL(sql01); /** * 取最大的循环,对每一条进行判断 * for(i,i<list){ * for(j,j<account){ * if(list.sno(i)==account.son(j){ * insert(list.sno(i)-account.son(j)); * 将account中做过处理的条目插入临时templist * break; * * } * 对于list存在,而account不存在,将list(i)存入adjust * insert(list(i) * } * } #循环结束 * 检查 account.row 和 templist.row * if(account.row>templist.row){ * 将 for(i<account){ * if(acount.sno(i)==templist.sno(i){ * continue; * }else{ * insert(account(i)); * } * 数据处理完毕 * 发送邮件 * System.out.println(tSSRS.GetText(index, 3)+":::"+exeSql); */ // listSSRS 和 accoutSSRS List templist = new ArrayList();//临时数据表 if(listSSRS==null || listSSRS.MaxRow<=0){ if(accoutSSRS==null || accoutSSRS.MaxRow<=0){ }else{ for(int index=1;index<=accoutSSRS.MaxRow;index++){ System.out.println(accoutSSRS.GetText(index, 3)); //处理之后,insert(); } } }else{ if(accoutSSRS==null || accoutSSRS.MaxRow<=0){ for(int index=1;index<=listSSRS.MaxRow;index++){ System.out.println(listSSRS.GetText(index, 3)); //处理之后,insert(); } }else{ for(int i=1;i<=listSSRS.MaxRow;i++){ for(int j=1;j<=accoutSSRS.MaxRow;j++){ if(listSSRS.GetText(i, 1)==accoutSSRS.GetText(j, 1)){ //相减,做插入操作 templist.add(accoutSSRS.GetText(j,1)); }else{ //list的数据做插入操作 } } } //处理account中的数据 if(accoutSSRS.MaxRow>templist.size()){ for(int i=1;i<=accoutSSRS.MaxRow;i++){ if(templist.contains(accoutSSRS.GetText(i,1))){ }else{ //accountSSRS数据做负数处理,再insert()操作; } } } } }
觉得逻辑好复杂,就像有简单的方法吗?自己想出来是使用sql语句进行逻辑判断和运算
SELECT a.`list_id` AS id, a.`unicode` , (IFNULL(a.`value`,0) - IFNULL(b.`value`,0)) AS dif FROM LIST a LEFT JOIN account b ON a.unicode = b.`unicode` UNION SELECT b.`account_id` AS id, b.`unicode` , (IFNULL(a.`value`,0) - IFNULL(b.`value`,0)) AS dif FROM LIST a RIGHT JOIN account b ON a.unicode = b.`unicode`
其中, list 和account 表分别为