实现数据分类汇总的SQL语句

数据|语句

现有表Test,内容如下: ID   Catalog    Num 1          A            3 1          B            52          A            8 2          B            2 现在想按ID查询出这种结果: -------------------- 1          A           31          B           5 汇总小计:      82          A           8 2          B           2 汇总小计:     10  问:该如何实现?

在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 ======================== CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。  CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。 =========================   CUBE 和 ROLLUP 之间的区别在于:   CUBE 生成的结果集显示了所选列中值的所有组合的聚合。  ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

The ROLLUP operator is useful in generating reports that contain subtotals and totals. The ROLLUP operator generates a result set that is similar to the result sets generated by the CUBE operator.

The differences between CUBE and ROLLUP are:
CUBE generates a result set showing aggregates for all combinations of values in the selected columns.ROLLUP generates a result set showing aggregates for a hierarchy of values in the selected columns.
最后查询语句如下:

SELECT CASE WHEN (GROUPING(ID) = 1) THEN 'ALL'             ELSE ISNULL(ID, 'UNKNOWN')        END AS ID,        CASE WHEN (GROUPING(Catalog) = 1) THEN 'ALL'             ELSE ISNULL(Catalog, 'UNKNOWN')        END AS Catalog,        SUM(Num) AS Num FROM Test GROUP BY ID, Catalog WITH ROLLUP

时间: 2024-08-18 04:15:07

实现数据分类汇总的SQL语句的相关文章

一个根据列的范围分组汇总的Sql存储过程

1.需求说明 有如下表数据: ID NUM ----------- ----------- 1 2 2 3 3 2 4 2 5 12 6 2 7 1 8 5 9 1 10 1 11 1 输入分组参数,比如输入 "2,5,8,10" ,实现按 ID<=2,2<ID<=5,5<ID<=8,8<ID<=10,ID>10 分组查询,要得到下面的数据: groupdata num ---------- ----------- id<=2 5

数据库-sql语句将数据分类,显示到对应的数据层中

问题描述 sql语句将数据分类,显示到对应的数据层中 现在数据库有很多设备这些设备分为4钟类型,怎样将这些设备分类查询出来,只用一条sql哦 解决方案 没明白数据库跟设备是什么概念,分类group by 解决方案二: select * from table group by 设备类型 如果有需要后面还可以跟having或者order by当然也可以根据需要可以在table后面跟where条件查询的. 如果回答对您有帮助请采纳 解决方案三: group by是分类 order by desc/as

海量数据库的查询优化及分页算法方案 2 之 改良SQL语句_数据库其它

二.改善SQL语句  很多人不知道SQL语句在SQL SERVER中是如何执行的他们担心自己所写的SQL语句会被SQL SERVER误解.比如 select * from table1 where name=zhangsan and tID > 10000 和执行: select * from table1 where tID > 10000 and name=zhangsan 一些人不知道以上两条语句的执行效率是否一样因为如果简单的从语句先后上看这两个语句的确是不一样如果tID是一个聚合索引

SQL Server中的SQL语句优化与效率问题

很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhangsan' and tID > 10000 和执行: select * from table1 where tID > 10000 and name='zhangsan' 一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那

oracle中怎么确定性能差的SQL语句

前者很容易定位.所有的操作系统都可以让我们查看 CPU 密集型任务.这些任务可以追溯到一个特定用户,一个特定应用程序模块. CPU 密集型模块一般都是由较差的代码和/或结构造成,而不是性能差的 SQL.一旦确定模块,你必须试图使之更有效率.一个可能的解决方案是将把某些处理移除程序,让数据库处理(高明点的 SQL,存储对象,内联函数,数组处理等). 第二个是 I/O 密集型的 SQL 语句.这些语句会导致大量的数据库 I/O(全表扫描,排序,更新等),并以很高代价运行几个小时.从 Oracle 7

【原创】modb 功能设计之“支持对sql语句的相关日志记录”

[需求分析] 终于到了处理 sql 日志的阶段了,万里长征重点的关键一步. 需要考虑解决的问题点如下:  在哪个模块上做 sql 日志记录 都要记录哪些信息才能做到跨机房数据同步时,具有可查询.可分析.可监控的目的 sql 日志记录的模式或者说频率 针对 MoDB 要做跨机房数据的同步这个功能,那么可以对 sql 语句进行记录的"地方"有:  modb 应用中 Atlas 应用中 其中 Atlas 目前已支持 sql 日志的记录,格式如下:  ? 1 [11/25/2013 14:58

SQL语句的执行原理分析_MsSql

原理:第一步:应用程序把查询SQL语句发给服务器端执行.我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理.第二步:服务器解析请求的SQL语句.1:SQL计划缓存,经常用查询分析器的朋友大概都知道这样一个事实,往往一个查询语句在第一次运行的时候需要执行特别长的时间,但是如果你马上或者在一定时间内运行同样的语句,会在很短的时间内返回查询结果. 原因:1):服务器在接收到查询请求后,并不会马上去数据库查询,而是在数据库中的计划缓存中找是否有相对应的执行计划

sql语句执行与直接执行存储过程的效率比较

1.关于拼sql语句执行与直接执行存储过程的效率比较 1)在程序代码中拼sql语句,类似代码如下:                  代码如下 复制代码 System.Data.OleDb.OleDbCommand Command=conn.CreateCommand();                 Command.CommandTimeout=0;                 Command.Transaction=trans;                 Command.Com

SQL语句示例_MsSql

SQL的意思是结构化查询语言,其主要功能是同各种数据库建立联系,进行沟通.查询指的是对存储于SQL的数据的请求.查询要完成的任务是:将 Select 语句的结果集提供给用户.Select 语句从 SQL 中检索出数据,然后以一个或多个结果集的形式将其返回给用户.  ========================================================== Select 基本语法结构  ===========================================