当前位置: 代码迷 >> Oracle管理 >> 求教一SQL语句,该怎么处理
  详细解决方案

求教一SQL语句,该怎么处理

热度:101   发布时间:2016-04-24 05:25:46.0
求教一SQL语句

原始数据:
编号 名称 人数
 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
  相关解决方案