现有一张数据表包含如下列:帐单编号(主键),帐单月份,客户代码,帐单金额,欠款金额.简单列几行数据如下:
帐单编号                    帐单月份    客户代码   帐单金额   欠款金额
C_XS200702001              200702         C_XS        100                 100
C_YH200702001             200702          C_HS        238                  0
C_FUY200703001            200703          C_FUY     432                 432
......
我现在想要一个这样的报表,将各个月份前十位的欠费客户信息列出,其余的求和显示,
200702-200705欠费情况
200702                      200703                       200704
公司名称 欠款金额 公司名称 欠款金额 公司名称 欠款金额
外运箱运 1950 外运箱运 3045 外运箱运 3370
外运仓储 1260 外运仓储 687.5 货代_万海 1731
鲸华物流 710 泛亚物琉 680 洋浦正和 1080
货代_泰鸿 230 洋浦正和 532 鲸华物流 307.5
长江一部 170 鲸华物流 175 远洋货代 192.5
中条山 125 外代市场部 130 船代_中瑞 175
外仓保税 112.5 外仓保税 102.5 货代_泰鸿 170
货代_金远东 87.5 货代_泰鸿 95 泛亚物琉 100
瑞豪 85 货代_天嘉 77.5 华丰15部 90
泛亚物流 72.5 货代_予盛 70 恒鑫达集装箱部 75
其他 925 1080 901
合计 5727 6674 8192请问如何用SQL语句或者是存贮过程实现啊,谢谢大家

解决方案 »

  1.   

    现有一张数据表包含如下列:帐单编号(主键),帐单月份,客户代码,帐单金额,欠款金额.简单列几行数据如下:
    帐单编号                    帐单月份    客户代码   帐单金额   欠款金额
    C_XS200702001              200702         C_XS        100                 100
    C_YH200702001             200702          C_HS        238                  0
    C_FUY200703001            200703          C_FUY     432                 432
    ......
    我现在想要一个这样的报表,将各个月份前十位的欠费客户信息列出,其余的求和显示.这样需要两个SQL语句:
    1,select 帐单编号,帐单月份,客户代码,帐单金额,欠款金额 from 表名 order by 欠款金额 where 欠款金额>0 and rownum<11;
    2,select sum(欠款金额) 总欠款金额 from 表名 where 欠款金额>0;
      

  2.   

    SELECT 帐单编号,帐单月份,客户代码,帐单金额,欠款金额
    FROM (
    SELECT 帐单编号,帐单月份,客户代码,帐单金额,欠款金额, 
           ROW_NUMBER() OVER (PARTITION BY 帐单月份 ORDER BY 欠款金额) AS SEQ
    FROM   TABLENAME
          ) WHERE SEQ < 11UNIONSELECT SUM(帐单编号) OVER (PARTITION BY 帐单月份) AS 帐单编号,
           SUM(帐单月份) OVER (PARTITION BY 帐单月份) AS 帐单月份,
           SUM(客户代码) OVER (PARTITION BY 帐单月份) AS 客户代码,
           SUM(帐单金额) OVER (PARTITION BY 帐单月份) AS 帐单金额,
           SUM(欠款金额) OVER (PARTITION BY 帐单月份) AS 欠款金额
    FROM (
    SELECT 帐单编号,帐单月份,客户代码,帐单金额,欠款金额, 
           ROW_NUMBER() OVER (PARTITION BY 帐单月份 ORDER BY 欠款金额) AS SEQ
    FROM   TABLENAME
          ) WHERE SEQ > 10