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