表
原始数据:
编号 名称 人数
1110 一一班 6
1111 一二班 5
1112 一三班 5
2110 二一班 5
2111 二二班 9
2112 二三班 6
我想按照年级 也就是编号的第一位 统计每个年级总人数 并插入到该表
结果:
编号 名称 人数
1110 一一班 6
1111 一二班 5
1112 一三班 5
1999 总计 16
2110 二一班 5
2111 二二班 9
2112 二三班 6
2999 总计 20
sql语句该怎么编写呢?
------解决方案--------------------
- SQL code
select * from score;2110 二一班 52111 二二班 92112 二三班 61111 b 41112 c 71110 a 2select 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 总计 132 2999 总计 203 2110 二一班 54 2111 二二班 95 2112 二三班 66 1111 b 47 1112 c 78 1110 a 2
------解决方案--------------------
SELECT cname,
quantity
FROM
(SELECT DECODE(cname,NULL,'编号'
|| SUBSTR(code,1,1)
|| '小计',cname) AS cname,
grouping(cname) a,
grouping(SUBSTR(code,1,1)) b,
SUM(quantity) AS quantity
FROM
( SELECT '1110' AS code, '一一班' AS cname, 6 AS quantity 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
)
GROUP BY rollup(SUBSTR(code,1,1),cname)
)
WHERE NOT (a=1
AND b =1)
--结果
CNAME QUANTITY
---------- ----------------------
一二班 5
一三班 5
一一班 6
编号1小计 16
二二班 9
二三班 6
二一班 5
编号2小计 20
8 rows selected
------解决方案--------------------
- SQL code
select substr(to_char(num),0,1), NVL(name,'合计')||substr(to_char(num),0,1),sum(count) countfrom score group by rollup(substr(to_char(num),0,1),name);1 a1 21 b1 41 c1 71 合计1 132 二三班2 62 二二班 2 92 二一班 2 52 合计2 20 合计 33
------解决方案--------------------
如需要可以 这样查询 (select * from test1 order by 编号;) 即可
结果如下:
SQL> select * from test1 order by 编号;
编号 名称 人数
---------- ---------- ----------
1110 一一班 6
1111 一二班 5
1112 一三班 5
1999 总计 16
2110 二一班 5
2111 二二班 9
2112 二三班 6
2999 总计 20
3110 三一班 8
3111 三二班 10
3112 三三班 6
3113 三四班 7
3999 总计 31
4110 四一班 9
4111 四二班 7
4112 四三班 6
4113 四四班 9
4999 总计 31
5110 五一班 6
5111 五二班 12
5112 五三班 4
5113 五四班 8
5999 总计 30
已选择23行。
------解决方案--------------------
- SQL code
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 一一班 61111 一二班 51112 一三班 51999 总数 162110 二一班 52111 二二班 92112 二三班 62999 总数 20