SQLServer中汇总功能的使用GROUPING,ROLLUP和CUBE
第一次看到这样的SQL语句,看不懂,其中用到了下面的不常用的 聚集函数:GROUPING 用于汇总数据用的运算符: ROLLUP SELECT CASEGROUPING(o.customerid)WHEN0THENo.customeridELSE'(Total)'END ASAllCustomersSummary, C
第一次看到这样的SQL语句,看不懂,其中用到了下面的不常用的
聚集函数:GROUPING
用于汇总数据用的运算符: ROLLUP
SELECT CASE GROUPING(o.customerid) WHEN 0 THEN o.customerid ELSE '(Total)' END AS AllCustomersSummary, CASE GROUPING(od.orderid) WHEN 0 THEN od.orderid ELSE -1 END AS IndividualCustomerSummary, SUM(od.quantity*od.unitprice) AS price FROM Orders o, [Order Details] od WHERE Year(o.orderdate) = 1998 AND od.orderid=o.orderid GROUP BY o.customerid, od.orderid WITH ROLLUP ORDER BY AllCustomersSummary
查看SQL Server的帮助才发现,厉害啊,原来还有这么厉害的东西,不由的想起以前做水晶报表的时候,原来在SQL Server中就可以实现这样的功能.
1.用 CUBE 汇总数据
CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。
CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。
例如,一个简单的表 Inventory 中包含: