表一数据:
    科目             金额 
5401-2-3201-1        100
5401-2-3201-12       200
5401-2-3201-2        400希望得到如下结果:
5401                  700
5401-2                700
5401-3201             700
5401-2-3201-1         100
5401-2-3201-12        200
5401-2-3201-2         400请问sql该如何实现?

解决方案 »

  1.   

    select sum(金额) from 表一
    where 科目 like substr(科目, 1, 4) || '%'   --查以5401开头的
    union
    select sum(金额) from 表一
    where 科目 like substr(科目, 1, 6) || '%'   --查以5401-2开头的
    ...
    以此类推substr的使用,查一下orcle文档,记不清了
      

  2.   

    create table caiwu (kemu  varchar2(50),moeny number)
    select t.kemu,sum(t.moeny) from caiwu t
    group by rollup(kemu)
      

  3.   

    SQL> select * from test1;
     
    ITEM                  VALUE
    -------------------- ------
    5401-2-3201-1           100
    5401-2-3201-12          200
    5401-2-3201-2           400
     
    SQL> 
    SQL> SELECT ITEM, SUM(VALUE)
      2    FROM (SELECT SUBSTR(A.ITEM || '-', 1, INSTR(A.ITEM || '-', '-', 1, RN) - 1) ITEM,VALUE
      3            FROM TEST1 A,
      4                 (SELECT ROWNUM RN FROM DUAL CONNECT BY ROWNUM <= 20) B)
      5   WHERE ITEM IS NOT NULL
      6   GROUP BY ITEM
      7   ORDER BY ITEM
      8  ;
     
    ITEM                                       SUM(VALUE)
    ------------------------------------------ ----------
    5401                                              700
    5401-2                                            700
    5401-2-3201                                       700
    5401-2-3201-1                                     100
    5401-2-3201-12                                    200
    5401-2-3201-2                                     400
     
    6 rows selected
     
    SQL>