原諒鏈接:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms175939(v=sql.90)
CUBE 運算符生成的結果集是多維數據集。多維數據集是事實數據(即記錄個別事件的數據)的擴展。擴展是基於用戶要分析的列建立的。這些列稱爲維度。多維數據集是結果集,其中包含各維度的所有可能組合的交叉表格。
CUBE 運算符在 SELECT 語句的 GROUP BY 子句中指定。該語句的選擇列表包含維度列和聚合函數表達式。GROUP BY 指定了維度列和關鍵字 WITH CUBE。結果集包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎行中的聚合值。
CREATE TABLE Inventory
(
Item char(10) NULL,
Color char(10) NULL,
Quantity int NULL
)
INSERT INTO Inventory
VALUES
('Table','Blue','124'),
('Table','Red','223'),
('Chair','Blue','101'),
('Chair','Red','210')
SELECT Item,Color,SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item,Color WITH CUBE
SELECT Item,Color,SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY CUBE(Item,Color)
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH CUBE
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item WITH CUBE
GO
CREATE VIEW InvCube AS
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH CUBE
SELECT *
FROM InvCube
WHERE Item = 'Chair'
AND Color = 'ALL'