求SQL语句、数据库为ORACLE
实现的功能:
从凭证分录明细表detail 表中取出某年度和某会计期间的所有一级借方科目和其对方一级科目的唯一记录,格式如下:
一级借方科目名称 对方一级科目名称 凭证张数 对方一级科目的贷方发生额 分录笔数 平均每笔金额 最大单笔金额
表结构:
凭证分录表Detail:
会计年度 期间(月份) 借贷方向(D、C)D标识借方,C标识贷方 科目主键 借方发生额 贷方发生额 凭证号 分录号
char char char char decimal decimal int int
yearv periodv direction Pk_accsubj Debitamount creditamount nov detailindex科目表:bd_accsubj
科目主键 科目代码 科目名称
Pk_accsubj subjcode subjname
00010001 1001 库存现金
00010002 100101 人民币
00010003 100102 港币 说明:detail.pk_accsubj 与bd_accsubj.pk_accsubj 关联,凭证分录表中是保存的最末级科目,
科目表中每一级的科目都有记录,如上所示。
科目代码的级次为4/2/2/2/2,即第一级科目代码的位数为4位,其余的级次的位数为2位;

解决方案 »

  1.   

    实现这个功能主要为了对财务系统的内部审计,即对财务系统中的凭证分录表进行处理。目前财务系统中的凭证数据一般来说有两张表,一张主表,一张明细表,凭证明细表中记录了某张凭证所有分录明细。凭证明细表中的科目是最末级的,是以主键形式保存,要与科目表中科目主键去关联,科目表记录了所有级次的科目数据,如:科目1001库存现金,100101库存现金-人民币,100102库存现金-港币。
    从凭证分录明细表detail 表中取出某年度和某段会计期间的所有一级借方科目和其对方一级贷科目的唯一记录,同时还要反映一些数值型字段的统计功能。凭证分录明细表detail中须用到的字段有:(D、C)D标识借方,C标识贷方
    字段名:会计年度 期间 借贷方向 科目主键  借方发生额  贷方发生额  凭证号  分录号 
    字段类型:char  char  char   char    decimal   decimal     int    int 
    英文名: yearv  periodv direction Pk_accsubj Debitamount creditamount nov detailindex
    数据示例:(凭证分录表,对应上述字段)
              2009  01     D      01AA   1000      0          1       1
             2009  01     C      01TT   0         500        1       2
             2009  01     C      01AB   0         500        1       3
             2009  01     D      01AC   1000      0          2       1
             2009  01     D      01AD   1000      0          2       2
             2009  01     C      01TT   0         1000       2       3
             2009  01     C      01RB   0         1000       2       4
             2009  01     D      01BB   5000      0          3       1
             20009 01     C      01CC   0         5000       3       2说明:借贷方向:D标识借方,C标识贷方科目表:bd_accsubj  
    字段名:科目主键  科目代码   科目名称 
    类型:  char     varchar   varchar
    英文名:Pk_accsubj subjcode subjname 
           0101       1001     库存现金 
            01TT       100101   人民币 
            0102       1002     银行存款
            01AB       100201   工商银行
            0103       1221     其他应收款
            01RB       122101   个人往来
            0109       6002     管理费用
            01AA       600201   差旅费
            01AC       600202   业务招待费
            01AD       600203   会议费 
            0104       1405     库存商品
            01CC       140501   地产烟
            0105       6401     主营业务成本
            01BB       640101   地产烟说明:detail.pk_accsubj 与bd_accsubj.pk_accsubj 关联,凭证分录表中是保存的最末级科目, 
    科目表中每一级的科目都有记录,如上所示。 
    科目代码的级次为4/2/2/2/2,即第一级科目代码的位数为4位,其余的级次的位数为2位; 数据显示的格式:
    一级借方科目名称 对方一级科目名称 凭证张数 对方一级科目的贷方发生额 分录笔数 平均每笔金额 最大单笔金额管理费用          库存现金          2        1500                 2        750    1000  
                    银行存款          1        500                  1        500    500
                    其他应收款        1        1000                 1        1000   1000
    主营业务成本      库存商品          1        5000                 1        5000   5000说明:上述3张凭证分录中,借方一级科目只有管理费用和主营业务成本,借方管理费用对应的贷方一级科目有:库存现金、银行存款、其他应收款 三个一级科目,第一行显示记录的凭证张数的取数是,凭证分录中的借方一级科目是管理费用,贷方一级科目是库存现金的凭证数,由于1、2号凭证中满足条件,故凭证张数=2,其他同理。
             
      

  2.   


    select m.sn,m.cn,m.sm,m.cn1,m.am,m.mm
    from
    (select c.subjname sn,
           count(a.debitamount)over(partition by a.pk_accsubj) cn,
           sum(a.creditamount)over(partition by a.pk_accsubj) sm,
           count(a.debitamount)over(partition by a.pk_accsubj) cn1,
           avg(a.creditamount)over(partition by a.pk_accsubj) am,
           max(to_number(a.creditamount))over(partition by a.pk_accsubj) mm,
           row_number()over(partition by c.subjname order by c.subjname) rn
    from detail a, bd_accsubj b,bd_accsubj c
    where a.direction = 'C'
    and a.pk_accsubj = b.pk_accsubj
    and c.subjcode = substr(b.subjcode,1,4)
    order by b.subjcode) m
    where m.rn = 1;