17,377
社区成员
发帖
与我相关
我的任务
分享
with test as(
select '1110' id,'一一班' name, 6 num from dual
union all
select '1111', '一二班', 5 from dual
union all
select '1112','一三班',5 from dual
union all
select '2110','二一班', 5 from dual
union all
select '2111', '二二班', 9 from dual
union all
select '2112','二三班',6 from dual
)
select decode(id,null,rpad(substr(id,1,1),4,'9'),id), decode(name,null,(decode(substr(id,1,1),'1','一班小记','2','二班小记')),name), sum(num)
from test
group by rollup(substr(id,1,1),id, name)
having grouping_id(id, name) <> 1
1110 一一班 6
1111 一二班 5
1112 一三班 5
1999 一班小记 16
2110 二一班 5
2111 二二班 9
2112 二三班 6
2999 二班小记 20
(null) (null) 36
select substr(to_char(num),0,1), NVL(name,'合计')||substr(to_char(num),0,1),sum(count) count
from score group by rollup(substr(to_char(num),0,1),name);
1 a1 2
1 b1 4
1 c1 7
1 合计1 13
2 二三班2 6
2 二二班 2 9
2 二一班 2 5
2 合计2 20
合计 33
create table student(
bh varchar2(10),
mc varchar2(10),
rs int)
;
insert into student values('1110','一一班',6);
insert into student values('1111','一二班',5);
insert into student values('1112','一三班',5);
insert into student values('2110','二一班',5);
insert into student values('2111','二二班',9);
insert into student values('2112','二三班',6);
commit;
insert into student
select substr(bh, 1, 1) || '999', '总数', sum(rs)
from student
group by substr(bh, 1, 1);
commit;
SQL> select * from student order by bh;
BH MC RS
---------- ---------- ---------------------------------------
1110 一一班 6
1111 一二班 5
1112 一三班 5
1999 总数 16
2110 二一班 5
2111 二二班 9
2112 二三班 6
2999 总数 20
select * from score;
2110 二一班 5
2111 二二班 9
2112 二三班 6
1111 b 4
1112 c 7
1110 a 2
select to_number(substr(to_char(num),0,1)||999) num,'总计' name,sum(count) count
from score group by substr(to_char(num),0,1)
union all select * from score;
1 1999 总计 13
2 2999 总计 20
3 2110 二一班 5
4 2111 二二班 9
5 2112 二三班 6
6 1111 b 4
7 1112 c 7
8 1110 a 2