使用 CUBE 彙總數據

原諒鏈接: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'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章