CUBE 是 GROUP BY 的擴充功能,能在單一查詢中產生所有維度組合的彙總結果。若 GROUP BY 有 n 個資料行/運算式,CUBE 會回傳 2^n - 1 種彙總組合(含總計),極適合 OLAP 式報表、銷售儀表板等需求。
SELECT <資料行清單>, <彙總函數>
FROM <資料表>
GROUP BY <資料行清單> WITH CUBE
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;
| productid | orderid | total | 商業意義 |
|---|---|---|---|
| NULL | NULL | 95 | 所有訂單、所有產品總量(Grand Total) |
| NULL | 1 | 30 | 訂單 1 所有產品小計 |
| NULL | 2 | 65 | 訂單 2 所有產品小計 |
| 1 | NULL | 15 | 產品 1 所有訂單小計 |
| 1 | 1 | 5 | 訂單 1 產品 1 明細 |
| 1 | 2 | 10 | 訂單 2 產品 1 明細 |
| 2 | NULL | 35 | 產品 2 所有訂單小計 |
| 2 | 1 | 10 | 訂單 1 產品 2 明細 |
| 2 | 2 | 25 | 訂單 2 產品 2 明細 |
| 3 | NULL | 45 | 產品 3 所有訂單小計 |
| 3 | 1 | 15 | 訂單 1 產品 3 明細 |
| 3 | 2 | 30 | 訂單 2 產品 3 明細 |
| 特性 | CUBE | ROLLUP |
|---|---|---|
| 組合數 | 2^n - 1(全排列) | n + 1(階層式) |
| 適用場景 | 多維獨立分析(如產品×區域×通路) | 階層鑽取(如 年→季→月) |
| NULL 含義 | 任意維度的「全部」 | 僅最外層為「全部」 |
GROUPING() 函數:判斷某資料行是否為彙總列(回傳 1 表彙總),便於前端顯示「總計」文字而非 NULL。WHERE 過濾:若只需特定產品/訂單/日期區間,先在 WHERE 縮減資料集,再套用 CUBE,大幅降低運算量。WITH CUBE 讓 T-SQL 具備輕量級 OLAP 能力,無需部署 SSAS 即可產出豐富的交叉分析報表。善用 GROUPING() 與 WHERE 過濾,即可在交易型資料庫上直接跑出管理決策所需的多維度 KPI。