程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL系列ROLLUP關鍵字

SQL系列ROLLUP關鍵字

編輯:關於SqlServer

為什麼要引入ROLLUP?
可方便的生成"合計"、"小計"、"總計" 等混合統計的報表
如下數據集A經過ROLLUP運算可生成數據集B



接下來用上圖中的A表做各種測試:

1.ROLLUP簡單應用

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP
查詢結果如下:


如果用ROLLUP的另一個關鍵字CUBE產生的結果如下:

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH CUBE

結果:



引出一個概念:
維:查詢所指定的列稱為維,列的個數稱為維度
以上兩個SQL語句涉及三個維度,ROLLUP和CUBE都可以用於多維計算,不同點在於CUBE可以包含所有緯度的組合,而
ROLLUP只涉及指定列的維度計算。

2.ROLLUP運算關鍵字GROUPING
GROUPING:判斷是否為多維計算中的附加列,如果是則輸出1,否則輸出0


SELECT Groups= CASE WHEN GROUPING(GROUPS)=1 THEN 1 ELSE 0 END ,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP

結果:




引入ROLLUP可以方便的對查詢結果排序或自定義附加列的格式
排序應用:


SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC
結果:


補充:關於漢字、字母、null、空值、數字的排序問題

SELECT * FROM @t ORDER BY groups DESC
結果:


至於自定義附加列的樣式在第三步講解

3.ROLLUP綜合運用

SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '總計'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 THEN Groups+' 合計'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 THEN Item+' 小計'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
ORDER BY GROUPING(Groups),
CASE WHEN GROUPING(Groups)=0 THEN Groups END DESC,
GROUPING(Item),
CASE WHEN GROUPING(Item)=0 THEN Item END DESC,
GROUPING(Color),
CASE WHEN GROUPING(Color)=0 THEN Color END DESC

結果:


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved