视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQL2008新应用之T-SQLGroupingsets
2020-11-09 08:10:04 责编:小采
文档


SQL SERVER 2005 使用了WITH CUBE 和WITH ROLLUP来显示统计信息,这是非常有用的功能,但它却不能提供很好的控制显示方法,但在katmai(sqlserver的下一个版本,估且称它mssql2008),以上的一切都会因 GROUPING SETS 引入而改变。使用GROUPING SETS,我们会获

  SQL SERVER 2005 使用了WITH CUBE 和WITH ROLLUP来显示统计信息,这是非常有用的功能,但它却不能提供很好的控制显示方法,但在katmai(sqlserver的下一个版本,估且称它mssql2008),以上的一切都会因GROUPING SETS引入而改变。使用GROUPING SETS,我们会获得想要统计信息。

  在这里,给出一个实例:

  语句A

以下是引用片段:
  select ProductKey,OrderDateKey,CustomerKey,PromotionKey,
  sum(UnitPrice)SumUnitPrice,
  sum(OrderQuantity)SumOrderQuantity
  from dbo.FactInternetSales
  group by ProductKey,OrderDateKey,CustomerKey,PromotionKey
  用GROUPING SETS来表达同一逻辑性语句

  语句B

以下是引用片段:
  select ProductKey,OrderDateKey,CustomerKey,PromotionKey,
  sum(UnitPrice)SumUnitPrice,
  sum(OrderQuantity)SumOrderQuantity
  from dbo.FactInternetSales
  group by
  grouping sets(
  (
  ProductKey,OrderDateKey,CustomerKey,PromotionKey
  )
  )
  语句B使用GROUPING SETS,grouping sets中的内容与语句A中的group by一致,并且它也返回相同数据。

  看到上面的例子大家或许会猜想出一二,我将给大家展示一下grouping sets的特别之处。

  例子:

  当我们在不同的集合中使用分组,则GROUPING SETS将会非常有用。

以下是引用片段:
  select ProductKey,OrderDateKey,CustomerKey,PromotionKey,
  sum(UnitPrice)SumUnitPrice,
  sum(OrderQuantity)SumOrderQuantity
  from dbo.FactInternetSales
  group by
  grouping sets(
  --Aggregate by all columns in the select clause
  (
  ProductKey,
  OrderDateKey,
  CustomerKey,
  PromotionKey
  ),
  --Aggregate by a subset of the columns in the select clause
  (
  ProductKey,
  OrderDateKey,
  CustomerKey
  ),
  ()
  --ALL aggregation
  );
  这条语句使用了三个grouping sets:

  第一个grouping sets以(ProductKey,OrderDateKey,CustomerKey,PromotionKey)为单位分组聚集UnitPrice & OrderQuantity

  第二个grouping sets以(ProductKey,OrderDateKey,CustomerKey)为单位分组聚集UnitPrice & OrderQuantity

  第三个grouping sets直接聚集UnitPrice & OrderQuantity,相当于一条汇总数据

  说明:grouping sets 没有使用的select子句中的列将会返回NULL值。

  整个结果集对每一个GROUPING SETS做运算。

  下面是一个执行结果的截图

  

  看一下最后一句,这句就是第三个grouping sets,它在每一个非聚集列中都显示NULL,你同样能看到在第二个grouping sets中,没有使用到的列也显示NULL。

  总结:

  本文讲解了grouping sets使用方法,我的第一印象是它的自定义化比较强,很灵活,我们甚至可以自己聚合出OLAP集合。

下载本文
显示全文
专题