要求输出的格式:
   A
   AB1
   AB1C1
   AB1C2
   
   AB2
   AB2C1
   AB2C2
   
   ABN
   ABNC1
   ABNC2
   
   ABNCM   是否输出AB1行决定于它下面的子数据个数是不是为0,也就是AB1C1,AB1C2ABNCM这些的个数是不是为0.
   是否输出A行又决定于它下层的子数据个数是不是为0,也就是AB1,AB2。ABN这些的个数是不是为0;   这些数据都是从一个表里取出来的。每一层下面子层个数不确定
   

解决方案 »

  1.   

    就是一个表里的数据同一列上有递归关系,是否显示父层决定于该层的子层是否有数据,具体就是A和AB1,AB2ABN的关系,是否显示A决定于AB1,AB2。。ABN的个数是否为0;而AB1,AB2..ABN是否显示又决定于各自下的子层是否有数据,具体AB1是否显示决定于AB1C1,AB1C2AB1CN的个数是否为0  
      

  2.   

    处理前
    LIST1 NUM
    0201 100
    0201 200
    0202 100
    0202 10
    0202 15
    0301 10
    0301 12
    0302 50
    0302 50

    处理后
    LIST1 NUM
    02 300+125
    0201 100+200(300)
    0201 100
    0201 200
    0202 100+10+15(125)
    0202 100
    0202 10
    0202 15
    03 22+50
    0301 10+12(22)
    0301 10
    0301 12
    0302 50(50)
    0302 50
      

  3.   

    select LIST1,sum(NUM)
    from tab
    group by rollup(substr(LIST1,1,2),substr(LIST1,1,4))
    试下,
      

  4.   

    刚换了WIN7,ORALCE都没装起来。。这个问题是带回来的。好像CUBE,ROLLUP这几个函数都很强大
      

  5.   

    with tt as(
      select '0201' list1, 100 num from dual union all
      select '0201' list1, 200 num from dual union all
      select '0202' list1, 100 num from dual union all
      select '0202' list1, 10  num from dual union all
      select '0202' list1, 15  num from dual union all
      select '0301' list1, 10  num from dual union all
      select '0301' list1, 12  num from dual union all
      select '0302' list1, 50  num from dual union all
      select '0302' list1, 50  num from dual), 
     a AS (SELECT DISTINCT substr(tt.list1, 1, LEVEL * 2) list, LEVEL
        FROM dual, tt
      CONNECT BY LEVEL <= length(tt.list1) / 2)
    SELECT a.list, SUM(tt.num)
      FROM tt, a
     WHERE tt.list1 LIKE a.list || '%'
     GROUP BY a.list
     ORDER BY a.list;