T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP能够当作是GROUPING SETS的简写版数据库
示例数据库下载:函数
http://files.cnblogs.com/files/haseo/TSQL2012.rarspa
GROUPING SETScode
列出全部你设置的分组集blog
SELECT shipperid, YEAR(shippeddate) AS shipyear, COUNT(*) AS numorders FROM Sales.Orders GROUP BY GROUPING SETS ( ( shipperid, YEAR(shippeddate) ), ( shipperid ), ( YEAR(shippeddate) ), ( ) );
CUBEseo
列出全部可能的分组集ip
SELECT shipperid , YEAR(shippeddate) AS shipyear , COUNT(*) AS numorders FROM Sales.Orders GROUP BY CUBE(shipperid, YEAR(shippeddate));
SELECT shipcountry , shipregion , shipcity , COUNT(*) AS numorders FROM Sales.Orders GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
GROUPING()
该函数用来区分带入的元素是否属于分组的一部分, 返回0表示属于,1表示不属于ci
SELECT shipcountry , GROUPING(shipcountry) AS grpcountry , shipregion , GROUPING(shipregion) AS grpcountry , shipcity , GROUPING(shipcity) AS grpcountry , COUNT(*) AS numorders FROM Sales.Orders GROUP BY ROLLUP(shipcountry, shipregion, shipcity);
GROUPING_ID()rpc
该函数返回分组列的位图(学过二进制的小伙伴都懂的,8421...以此类推) ,若是是0则全部分组字段都是分组的一部分,若是某个分组字段不是分组集的一部分则返回对应数字(既相关二进制位置1),最后进行汇总。it
以下代码,若是shipcountry, shipregion, shipcity均是分组的一部分则返回0. 若是shipregion, shipcity 不在分组内,则是3 (0+2+1 )
SELECT GROUPING_ID(shipcountry, shipregion, shipcity) AS grp_id , shipcountry , shipregion , shipcity , COUNT(*) AS numorders FROM Sales.Orders GROUP BY ROLLUP(shipcountry, shipregion, shipcity);