日期:2014-05-17 浏览次数:20928 次
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
------解决方案--------------------
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行。
------解决方案--------------------
create table student( bh varchar2(10), mc varchar2(10), rs int) ; insert into stude