首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server CUBE 運算子深度解析:多維度交叉彙總的利器

     編輯:關於SqlServer

CUBE 是 GROUP BY 的擴充功能,能在單一查詢中產生所有維度組合的彙總結果。若 GROUP BY 有 n 個資料行/運算式,CUBE 會回傳 2^n - 1 種彙總組合(含總計),極適合 OLAP 式報表、銷售儀表板等需求。

語法與限制

SELECT <資料行清單>, <彙總函數>
FROM <資料表>
GROUP BY <資料行清單> WITH CUBE
  • 最多 10 個分組運算式
  • 不可搭配 ALL 關鍵字
  • 結果集中 NULL 代表「所有成員」(All Members)

實戰範例:訂單產品數量多維彙總

情境:3 種產品(1,2,3),2 張訂單(1,2),資料表 orders 含 productid、orderid、quantity。

SELECT productid, orderid, SUM(quantity) AS total
FROM orders
GROUP BY productid, orderid WITH CUBE
ORDER BY productid, orderid;

結果解讀

productidorderidtotal商業意義
NULLNULL95所有訂單、所有產品總量(Grand Total)
NULL130訂單 1 所有產品小計
NULL265訂單 2 所有產品小計
1NULL15產品 1 所有訂單小計
115訂單 1 產品 1 明細
1210訂單 2 產品 1 明細
2NULL35產品 2 所有訂單小計
2110訂單 1 產品 2 明細
2225訂單 2 產品 2 明細
3NULL45產品 3 所有訂單小計
3115訂單 1 產品 3 明細
3230訂單 2 產品 3 明細

CUBE vs ROLLUP 差異快速比較

特性CUBEROLLUP
組合數2^n - 1(全排列)n + 1(階層式)
適用場景多維獨立分析(如產品×區域×通路)階層鑽取(如 年→季→月)
NULL 含義任意維度的「全部」僅最外層為「全部」

實務應用建議

  • 搭配 GROUPING() 函數:判斷某資料行是否為彙總列(回傳 1 表彙總),便於前端顯示「總計」文字而非 NULL。
  • 加上 WHERE 過濾:若只需特定產品/訂單/日期區間,先在 WHERE 縮減資料集,再套用 CUBE,大幅降低運算量。
  • 大量資料改用 Analysis Services:超過百萬列的多維彙總,建議離線建立 Cube,查詢才會秒級回應。

結語

WITH CUBE 讓 T-SQL 具備輕量級 OLAP 能力,無需部署 SSAS 即可產出豐富的交叉分析報表。善用 GROUPING() 與 WHERE 過濾,即可在交易型資料庫上直接跑出管理決策所需的多維度 KPI。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved