有SQL如下,查询到按客户分类汇总的应收余额:
--找到按客户分类汇总的应收余额
Select ar.customer_id
,ar.customer_name
,Sum(nvl(ar.amount,0)-nvl(rev_b.rev_amount,0)) remaining   --应收余额
From 
--找到每张发票的应收金额
(Select a.customer_num customer_id   --客户ID
 ,a.customer_name customer_name     --客户名称
 ,a.trx_id id  --发票ID
 ,a_line.amount amount --发票应收金额
 ,a.due_date due_date --到期日
 From Trx a  --发票头表
,trx_line a_line  --发票行表
Where a.id=a_line.id
And a_line.account_class='REC'
) ar,
--找到按发票ID分类汇总的已收款金额
(Select rev.applied_trx_id ap_id  --关联发票ID
,sum(rev.amount_applied) rev_amount  --收款金额
 From rev
 Where rev.status='APP'
 Group By rev.applied_trx_id) rev_bWhere ar.id=rev_b.ap_id(+)
Group By ar.customer_id,ar.customer_name现每张发票对应收入部门,SQL如下:
Select a_line.trx_id id –发票ID
,code.segment2 seg  --部门
From trx_line a_line  --发票行表
,code_combinations code  --部门表
Where a_line.account_class='REV'
And a_line.code_combination_id=code.code_combination_id
Order By id需用PL/SQL输出每个客户的应收余额,和每个部门的应收余额,即
应收余额
A客户
B客户
部门1汇总
C客户
D客户
部门2汇总 上面的SQL我准备使用游标可以输出每个客户的应收款,但是想不出如何输出对应部门汇总的应收款,请哪位大侠能帮忙看看是可以使用SQL直接实现还是需用PL/SQL循环实现?用循环该如何做,谢谢!

解决方案 »

  1.   

    你用group by 按部门,按客户生成sum
    然后再用rollup可以实现部门汇总
    详细google下rollup的用用法就行了group by rollup(部门),客户
      

  2.   

    sum() over(partition by .. order by ...)
      

  3.   

    多谢高手回复,但是有个问题,我用PL/SQL输出时,游标循环输出在一个LOOP里面,格式为
               应收余额
    A客户      100
    B客户      200
    部门1     300但是使用rollup后输出格式为
                   应收余额
    部门1  A客户   100
    部门1  B客户   200
    部门1         300列无法对应列出输出呀,而且SQL出来后排序就是如此吗,部门对应客户汇总后跟着就是部门汇总?
    高手能否有办法处理?或者在PL/SQL里面程序实现?
    请再次赐教,谢谢!