• 需求,查询两个表, 将值相减,存入另外一张表


    今天做开发,需求是

            /**
             * 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 表分别为

  • 相关阅读:
    Codeforces461E Appleman and a Game 做题心得
    关于贪心问题的处理
    各种容斥 笔记
    博弈论 笔记
    家庭多个路由器组网方案(AP+AC)
    21.06.06 训练赛
    Redirect...
    Web Api实践系列(三)route特性使用
    《Red Tuner》隐私政策
    前缀和-1915. 最美子字符串的数目
  • 原文地址:https://www.cnblogs.com/zytcomeon/p/14519290.html
Copyright © 2020-2023  润新知