SQL Server2000:ROLLUP和CUBE運(yùn)算符使用
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
ROLLUP、CUBE運(yùn)算符和GROUP BY一起使用能在結(jié)果集中加入一些額外的統(tǒng)計(jì)信息,例如有一張OrderDetail表,結(jié)構(gòu)和數(shù)據(jù)如下:
例1:統(tǒng)計(jì)每個(gè)訂單的產(chǎn)品數(shù)量。 程序代碼 select orderid,sum(quantity) as quantity from orderDetail group by orderid with rollup 結(jié)果集: 如圖所示,ROLLUP統(tǒng)計(jì)出了所有訂單的產(chǎn)品數(shù)。 例2:統(tǒng)計(jì)每個(gè)訂單、每種產(chǎn)品的數(shù)量。 程序代碼 select orderid,productid,sum(quantity) as quantity from orderDetail group by orderid,productid with rollup 結(jié)果集: 如圖所示,ROLLUP統(tǒng)計(jì)出了每筆訂單的產(chǎn)品數(shù)以及所有訂單的產(chǎn)品數(shù)。 例3:統(tǒng)計(jì)每個(gè)訂單、每種產(chǎn)品的金額。 程序代碼 select orderid,productid,quantity,sum(price*quantity) as total from orderDetail group by orderid,productid,quantity with rollup 結(jié)果集: 如圖所示,ROLLUP統(tǒng)計(jì)出了每筆訂單的金額以及所有訂單的金額。 例4:當(dāng)GROUP BY后邊有多個(gè)字段時(shí),字段的前后順序不同,結(jié)果就會不同,用例2做測試。 程序代碼 select orderid,productid,sum(quantity) as quantity from orderDetail group by productid,orderid with rollup 結(jié)果集: 小結(jié) ·ROLLUP得緊跟在GROUP BY后邊使用; ·GROUP BY后邊字段的前后順序影響ROLLUP的結(jié)果; ·ROLLUP將GROUP BY后邊字段從右到左依次為NULL再匯總其他聚合列的值; 例5:再以例2為例,CUBE運(yùn)算符結(jié)果為例2和例4結(jié)果集的并集。 程序代碼 select orderid,productid,sum(quantity) as quantity from orderDetail group by orderid,productid with cube 結(jié)果集: 小結(jié) ·和ROLLUP運(yùn)算符不同的是CUBE運(yùn)算符不受GROUP BY后邊字段的前后順序的影響,CUBE運(yùn)算符將GROUP BY后邊字段排列組合設(shè)置為NULL再匯總其他聚合列的值; GROUPING函數(shù) GROUPING函數(shù)可以判斷列的值是否是ROLLUP、CUBE運(yùn)算符生成的,若則則函數(shù)值為1,否則為0。再來看一個(gè)例子: 程序代碼 select orderid,grouping(orderid) as g1,productid,grouping(productid) as g2,sum(quantity) as quantity from orderDetail group by orderid,productid with rollup 結(jié)果集: 該文章在 2011/3/13 0:25:19 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |