原文: 【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING語句的應用
CUBE 和 ROLLUP 之間的區別在于:
CUBE 運算符生成的結果集是多維數據集。多維數據集是事實數據的擴展,事實數據即記錄個別事件的數據。擴展建立在用戶打算分析的列上。這些列被稱為維。多維數據集是一個結果集,其中包含了各維度的所有可能組合的交叉表格。
CUBE 運算符在 SELECT 語句的 GROUP BY 子句中指定。該語句的選擇列表應包含維度列和聚合函數表達式。GROUP BY 應指定維度列和關鍵字 WITH CUBE。結果集將包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎行中的聚合值。
CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。
GROUPING:
當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為0。
需要注意的是,使用有 WITH ROLLUP 子句的 GROUP BY 語句時,不能再使用 ORDER BY 語句對結果集進行排序,如果對返回的結果順序不滿意,需要應用程序獲得結果后在程序中進行排序。
示例:
DECLARE @T TABLE ( 名稱 VARCHAR ( 10 ) , 出版商 VARCHAR ( 10 ) , 價格1 INT , 價格2 INT ) INSERT @T SELECT ' a ' , ' 北京 ' , 11 , 22 UNION ALL SELECT ' a ' , ' 四川 ' , 22 , 33 UNION ALL SELECT ' b ' , ' 四川 ' , 12 , 23 UNION ALL SELECT ' b ' , ' 北京 ' , 10 , 20 UNION ALL SELECT ' b ' , ' 昆明 ' , 20 , 30 SELECT * FROM @T -- WITH CUBE SELECT 名稱 , 出版商 , SUM (價格1) AS 價格1 , SUM (價格2) AS 價格2 , GROUPING (名稱) AS CHECK名稱 , GROUPING (出版商) AS CHECK出版商 FROM @T GROUP BY 名稱 , 出版商 WITH CUBE -- WITH ROLLUP SELECT 名稱 , 出版商 , SUM (價格1) AS 價格1 , SUM (價格2) AS 價格2 FROM @T GROUP BY 名稱 , 出版商 WITH ROLLUP -- GROUPING SELECT CASE WHEN ( GROUPING (名稱) = 1 ) THEN ' 總計 ' ELSE ISNULL (名稱, ' UNKNOWN ' ) END AS 名稱 , CASE WHEN ( GROUPING (出版商) = 1 ) THEN ' 小計 ' ELSE ISNULL (出版商, ' UNKNOWN ' ) END AS 出版商 , SUM (價格1) AS 價格1 , SUM (價格2) AS 價格2 FROM @T GROUP BY 名稱 , 出版商 WITH ROLLUP
WITH CUBE 結果集:
WITH ROLLUP 結果集:
GROUPING結果集:
【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING語句的應用
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
