原文: 【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING語(yǔ)句的應(yīng)用
CUBE 和 ROLLUP 之間的區(qū)別在于:
CUBE 運(yùn)算符生成的結(jié)果集是多維數(shù)據(jù)集。多維數(shù)據(jù)集是事實(shí)數(shù)據(jù)的擴(kuò)展,事實(shí)數(shù)據(jù)即記錄個(gè)別事件的數(shù)據(jù)。擴(kuò)展建立在用戶打算分析的列上。這些列被稱為維。多維數(shù)據(jù)集是一個(gè)結(jié)果集,其中包含了各維度的所有可能組合的交叉表格。
CUBE 運(yùn)算符在 SELECT 語(yǔ)句的 GROUP BY 子句中指定。該語(yǔ)句的選擇列表應(yīng)包含維度列和聚合函數(shù)表達(dá)式。GROUP BY 應(yīng)指定維度列和關(guān)鍵字 WITH CUBE。結(jié)果集將包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎(chǔ)行中的聚合值。
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。
GROUPING:
當(dāng)用 CUBE 或 ROLLUP 運(yùn)算符添加行時(shí),附加的列輸出值為1,當(dāng)所添加的行不是由 CUBE 或 ROLLUP 產(chǎn)生時(shí),附加列值為0。
需要注意的是,使用有 WITH ROLLUP 子句的 GROUP BY 語(yǔ)句時(shí),不能再使用 ORDER BY 語(yǔ)句對(duì)結(jié)果集進(jìn)行排序,如果對(duì)返回的結(jié)果順序不滿意,需要應(yīng)用程序獲得結(jié)果后在程序中進(jìn)行排序。
示例:
DECLARE @T TABLE ( 名稱 VARCHAR ( 10 ) , 出版商 VARCHAR ( 10 ) , 價(jià)格1 INT , 價(jià)格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 (價(jià)格1) AS 價(jià)格1 , SUM (價(jià)格2) AS 價(jià)格2 , GROUPING (名稱) AS CHECK名稱 , GROUPING (出版商) AS CHECK出版商 FROM @T GROUP BY 名稱 , 出版商 WITH CUBE -- WITH ROLLUP SELECT 名稱 , 出版商 , SUM (價(jià)格1) AS 價(jià)格1 , SUM (價(jià)格2) AS 價(jià)格2 FROM @T GROUP BY 名稱 , 出版商 WITH ROLLUP -- GROUPING SELECT CASE WHEN ( GROUPING (名稱) = 1 ) THEN ' 總計(jì) ' ELSE ISNULL (名稱, ' UNKNOWN ' ) END AS 名稱 , CASE WHEN ( GROUPING (出版商) = 1 ) THEN ' 小計(jì) ' ELSE ISNULL (出版商, ' UNKNOWN ' ) END AS 出版商 , SUM (價(jià)格1) AS 價(jià)格1 , SUM (價(jià)格2) AS 價(jià)格2 FROM @T GROUP BY 名稱 , 出版商 WITH ROLLUP
WITH CUBE 結(jié)果集:
WITH ROLLUP 結(jié)果集:
GROUPING結(jié)果集:
【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING語(yǔ)句的應(yīng)用
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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