Cube與Rollup函數詳解 [SQL Server]

來源:互聯網
上載者:User

為了簡單起見,假設如下表:

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的行的小計。其中兩個分組列的值都為空白,表明這兩個列是一個總計,即所有行的和。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.