為了簡單起見,假設如下表:
DI1 ID2 MyValue
---------------------------
A X 2
A X 1
A Y 2
A Y 1
B X 3
B Y 2
B Y 2
使用SUM()函數對第三個列值總計:
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2
返回結果:
ID1 ID2 (無列名)
A X 3
B X 3
A Y 3
B Y 4
Cube和Rollup從分組的查詢中取得結果,對第一列的值或者每個出現在Group By列列表中的所有列值的組合應用相同的彙總函式。
Rollup函數
這是對Group By列列表的第一列進行小計和總計計算的最簡單的方法。在假想的例子中,除計算每個唯一的列值的總和以外,還需計算DI1列中A和B行的總和。
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2
WITH ROLLUP
結果如下:
ID1 ID2 (無列名)
-------------------------
A X 3
A Y 3
A NULL 6
B X 3
B Y 4
B NULL 7
NULL NULL 13
空值表示在計算彙總值時忽略相關的列。
Cube函數
Cube運算子是對Rollup運算子的擴充。Cube不用於為GROUP BY列表中的第1列積累彙總值,而是對每個分組的列值執行積累。
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2
WITH CUBE
結果:
ID1 ID2 (無列名)
-------------------------
A X 3
B X 3
NULL X 6
A Y 3
B Y 4
NULL Y 7
NULL NULL 13
A NULL 6
B NULL 7
第1列中的空值表示該列值是第2列的值的積累。這些行包含ID2等於X或者Y的行的小計。其中兩個分組列的值都為空白,表明這兩個列是一個總計,即所有行的和。