程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL2008新應用之T-SQL Grouping sets

SQL2008新應用之T-SQL Grouping sets

編輯:關於SqlServer
--地寶翻譯整理,轉貼請注明出自微軟BI開拓者www.windbi.com

SQL Server 2005 使用了WITH CUBE WITH ROLLUP來顯示統計信息,這是非常有用的功能,但它卻不能提供很好的控制顯示方法,
但在katmaisqlserver的下一個版本,估且稱它mssql2008),以上的一切都會因GROUPING SETS引入而改變。使用GROUPING SETS,我們會獲得想要統計信息。
在這裡,給出一個實例:

語句A

select ProductKey,OrderDateKey,CustomerKey,PromotionKey,
          sum(UnitPrice)SumUnitPrice
,
          sum(OrderQuantity)SumOrderQuantity

from dbo.FactI

nternetSales
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 SETgrouping 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

nt>(ProductKey,OrderDateKey,CustomerKey)為單位分組聚集UnitPrice & OrderQuantity

第三個grouping sets直接聚集UnitPrice & OrderQuantity,相當於一條匯總數據

說明:grouping sets 沒有使用的select子句中的列將會返回NULL值。
整個結果集對每一個GROUPING SET做運算。
下面是一個執行結果的截圖


看一下最後一句,這句就是第三個grouping set,它在每一個非聚集列中都顯示NULL,你同樣能看到在第二個grouping set中,沒有使用到的列也顯示NULL.

">總結:本文講解了grouping sets使用方法。我的第一印象它的自定義化比較強,很靈活。我們甚至可以自己聚合出OLAP集合。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved