zoukankan      html  css  js  c++  java
  • sql rollup解决责任人收支余额

     问题的提出是周聪之前问过我的项目往来查询,不好在NC上一次性查询到。然后我就搞了一个很长的项目对账,发布了NC的节点。

    现在我做了总二的总账,每次领导问我项目还有多少钱,收了多少付了多少,我还要通过科目余额表查询,但是悲剧的是工程施工必须剔除月末配比的暂估,给13打电话,

    她也说NC没有法子查询一级科目然后还去掉某一个末级。

     查询结果出来之后,我想对一级科目做一个汇总,实现下图的效果

    sql外面嵌套了一层,因为发现虽然第一层有了wm_concat,可是使用rollup根本无用,后来发现使用rollup看来必须要对数字列进行聚合sum

     select valuecode, valuename,explanation,km,dispname,sum(借方),sum(贷方),yearv,
           periodv ,
           no    from (
     select   wmsys.wm_concat(gl_freevalue.valuecode) valuecode,
             wmsys.wm_concat(gl_freevalue.valuename) valuename,
           gl_detail.explanation,
           substr(bd_accsubj.dispname,1,4) km,
           bd_accsubj.dispname,  
           gl_detail.debitamount 借方,
           gl_detail.creditamount 贷方,
           gl_detail.yearv,
           gl_detail.periodv ,
           gl_voucher.no      
       from bd_accsubj
      join gl_detail
        on gl_detail.pk_accsubj = bd_accsubj.pk_accsubj
      join bd_glorgbook
        on bd_glorgbook.pk_glorgbook = bd_accsubj.pk_glorgbook
      join gl_voucher
        on gl_detail.pk_voucher = gl_voucher.pk_voucher
      left join gl_freevalue
        on gl_detail.assid = gl_freevalue.freevalueid
     where gl_detail.dr = '0'
       and  gl_detail.yearv>=2014
        and gl_detail.pk_systemv!='TR'--去掉年末的结转凭证
        and gl_detail.periodv<>'00' --去掉期初
    and bd_accsubj.subjcode not in('41040107','41040109','41040207','41040209','41040307','41040308','560106')--去掉月末配比和交税的所得税
       and bd_glorgbook.glorgbookcode = '015201-0001'--公司条件
       and gl_freevalue.valuecode like '015211%' --项目责任人条件
    group by   gl_detail.explanation,
               bd_accsubj.dispname,  
               gl_detail.yearv,
               gl_detail.periodv,
               gl_voucher.no,
               gl_detail.creditamount,
               gl_detail.debitamount) 
      group by valuecode, valuename ,km, rollup((explanation,dispname,yearv,periodv,no))       
     order by valuecode,dispname, yearv, periodv ,no

     

    昨天晚上再次想到一个问题,完全可以不用考虑wm_concat了,因为where条件的valuecode直接限制了工程项目而没有了“部门档案”

    这样一来,sql可以这样

    select   gl_freevalue.valuecode,
              gl_freevalue.valuename,
            gl_detail.explanation,
           substr(bd_accsubj.dispname,1,4) km,
           nvl(bd_accsubj.dispname,'小计') 科目,  
          -- gl_detail.debitamount,
           --gl_detail.creditamount,
          sum(gl_detail.debitamount) 支出,
         sum(gl_detail.creditamount) 收入,
           gl_detail.yearv||'-'||gl_detail.periodv 期间,
            gl_voucher.no   
       from bd_accsubj
      join gl_detail
        on gl_detail.pk_accsubj = bd_accsubj.pk_accsubj
      join bd_glorgbook
        on bd_glorgbook.pk_glorgbook = bd_accsubj.pk_glorgbook
      join gl_voucher
        on gl_detail.pk_voucher = gl_voucher.pk_voucher
      left join gl_freevalue
        on gl_detail.assid = gl_freevalue.freevalueid
     where gl_detail.dr = '0'
       and  gl_detail.yearv=2014
        and gl_detail.pk_systemv!='TR'--去掉年末的结转凭证
        and gl_detail.periodv<>'00' --去掉期初
    and bd_accsubj.subjcode not in
    ('41040107','41040109','41040207','41040209','41040307','41040308','560106')--去掉月末配比和交税的所得税
       and bd_glorgbook.glorgbookcode = '015201-0001'--公司条件
       and gl_freevalue.valuecode like '015211%' --项目责任人条件
     group by substr(bd_accsubj.dispname,1,4),
            rollup((gl_freevalue.valuecode,
                  gl_freevalue.valuename, 
                  gl_detail.explanation,
                  bd_accsubj.dispname,  
                  gl_detail.yearv,
                 gl_detail.periodv,
                 gl_voucher.no ))       
     order by substr(bd_accsubj.dispname,1,4),gl_freevalue.valuecode,yearv, periodv ,no

    通过这个sql对rollup有了进一步的理解,group by rollup中前面的group by要的是根据什么组求和的,就像这里的取前四位的一级会计科目2123 4104,然后后面的就是正常的使用group 必须要写的东西。

    之前的小计都是在最后面,最终发现还是order by的问题,排序第一个需要是group by后面的东西才能让小计分组在后面而不是都跑在最后面

    分组小计的rollup继续的例子

  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/sumsen/p/3834046.html
Copyright © 2011-2022 走看看