当前位置: 首页 > 图文教程 > 数据库 > 数据库技巧 > sql小计汇总 rollup用法实例分析

数据库技巧
一条DELETE语句
SQL SERVER 里的错误处理(try catch)
恢复 SQL 被注入后的数据代码
大数据量时提高分页的效率
数据库命名规范小结
where 子句的执行顺序
当数据库变慢时的解决方法
MYSQL 导入数据的几种不同
用户管理的备份(一致性备份、非一致性备份、脱机备份、联机备份)
多条件查询的程序
[原创]access mysql mssql 随机 10条数据的sql语句
Sybase 复制与热切换数据
Sql Server、Access数据排名的实现方法(例如:成绩排名)
sqlserver和oracle中对datetime进行条件查询的一点区别小结
在SQL Server和Oracle中创建job
Linux下 mysql oracle 简单使用手册
sql小计汇总 rollup用法实例分析
连续序号的 sql语句
SQLServer与Access常用SQL函数区别
JDBC 数据库常用连接 链接字符串

数据库技巧 中的 sql小计汇总 rollup用法实例分析


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 58 ::
收藏到网摘: n/a

rollup在oracle ,sql-server里面都有有。 这里介绍sql server2005里面的一个使用实例:
CREATE TABLE tb(province nvarchar(10),city nvarchar(10),score int)
INSERT tb SELECT '陕西','西安',3
UNION ALL SELECT '陕西','安康',4
UNION ALL SELECT '陕西','汉中',2
UNION ALL SELECT '广东','广州',5
UNION ALL SELECT '广东','珠海',2
UNION ALL SELECT '广东','东莞',3
UNION ALL SELECT '江苏','南京',6
UNION ALL SELECT '江苏','苏州',1
GO
1、 只有一个汇总
select province as 省,sum(score) as 分数 from tb group by province with rollup
结果:
广东 10
江苏 7
陕西 9
NULL 26
select case when grouping(province)=1 then '合计' else province end as 省,sum(score) as 分数 from tb group by province with rollup
结果:
广东 10
江苏 7
陕西 9
合计 26
2、两级,中间小计最后汇总
select province as 省,city as 市,sum(score) as 分数 from tb group by province,city with rollup
结果:
广东 东莞 3
广东 广州 5
广东 珠海 2
广东 NULL 10
江苏 南京 6
江苏 苏州 1
江苏 NULL 7
陕西 安康 4
陕西 汉中 2
陕西 西安 3
陕西 NULL 9
NULL NULL 26
select province as 省,city as 市,sum(score) as 分数,grouping(province) as g_p,grouping(city) as g_c from tb group by province,city with rollup
结果:
广东 东莞 3 0 0
广东 广州 5 0 0
广东 珠海 2 0 0
广东 NULL 10 0 1
江苏 南京 6 0 0
江苏 苏州 1 0 0
江苏 NULL 7 0 1
陕西 安康 4 0 0
陕西 汉中 2 0 0
陕西 西安 3 0 0
陕西 NULL 9 0 1
NULL NULL 26 1 1
select case when grouping(province)=1 then '合计' else province end 省,
case when grouping(city)=1 and grouping(province)=0 then '小计' else city end 市,
sum(score) as 分数
from tb group by province,city with rollup
结果:
广东 东莞 3
广东 广州 5
广东 珠海 2
广东 小计 10
江苏 南京 6
江苏 苏州 1
江苏 小计 7
陕西 安康 4
陕西 汉中 2
陕西 西安 3
陕西 小计 9
合计 NULL 26