要求输出的格式:
A
AB1
AB1C1
AB1C2
AB2
AB2C1
AB2C2
ABN
ABNC1
ABNC2
ABNCM 是否输出AB1行决定于它下面的子数据个数是不是为0,也就是AB1C1,AB1C2ABNCM这些的个数是不是为0.
是否输出A行又决定于它下层的子数据个数是不是为0,也就是AB1,AB2。ABN这些的个数是不是为0; 这些数据都是从一个表里取出来的。每一层下面子层个数不确定
A
AB1
AB1C1
AB1C2
AB2
AB2C1
AB2C2
ABN
ABNC1
ABNC2
ABNCM 是否输出AB1行决定于它下面的子数据个数是不是为0,也就是AB1C1,AB1C2ABNCM这些的个数是不是为0.
是否输出A行又决定于它下层的子数据个数是不是为0,也就是AB1,AB2。ABN这些的个数是不是为0; 这些数据都是从一个表里取出来的。每一层下面子层个数不确定
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
from tab
group by rollup(substr(LIST1,1,2),substr(LIST1,1,4))
试下,
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;