日期:2014-05-17  浏览次数:20887 次

求教一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     二一班     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

------解决方案--------------------
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) 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

------解决方案--------------------
如需要可以 这样查询 (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 stude