nternetSales
">grouping sets
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 SET,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
--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使用方法。我的第一印象它的自定義化比較強,很靈活。我們甚至可以自己聚合出OLAP集合。