with rollup 、with cube、grouping
CUBE 和 ROLLUP 之間的區(qū)別在于:
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。
grouping:
當(dāng)用 CUBE 或 ROLLUP 運(yùn)算符添加行時(shí),附加的列輸出值為1,當(dāng)所添加的行不是由 CUBE 或 ROLLUP 產(chǎn)生時(shí),附加列值為0。
--例如
DECLARE @T TABLE(名稱(chēng) VARCHAR(1) , 出版商 VARCHAR(10), 價(jià)格1 INT, 價(jià)格2 INT)
INSERT @T
SELECT 'a', '北京', 11, 22 UNION ALL
SELECT 'a', '四川', 22, 33 UNION ALL
SELECT 'b', '四川', 12, 23 UNION ALL
SELECT 'b', '北京', 10, 20 UNION ALL
SELECT 'b', '昆明', 20, 30
SELECT
名稱(chēng),
出版商,
SUM(價(jià)格1) AS 價(jià)格1,
SUM(價(jià)格2) AS 價(jià)格2,
GROUPING(名稱(chēng)) AS CHECK名稱(chēng),
GROUPING(出版商) AS CHECK出版商
FROM @T GROUP BY 名稱(chēng),出版商 WITH CUBE
/*
名稱(chēng) 出版商 價(jià)格1 價(jià)格2 CHECK名稱(chēng) CHECK出版商
---- ---------- ----------- ----------- ------- --------
a 北京 11 22 0 0
a 四川 22 33 0 0
a NULL 33 55 0 1
b 北京 10 20 0 0
b 昆明 20 30 0 0
b 四川 12 23 0 0
b NULL 42 73 0 1
NULL NULL 75 128 1 1
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
(所影響的行數(shù)為 11 行)
*/
--分析
/*group by 兩列:名稱(chēng)有兩個(gè)類(lèi)別A,B;所有由CUBE運(yùn)算而生成行的是
名稱(chēng) 出版商 價(jià)格1 價(jià)格2 CHECK名稱(chēng) CHECK出版商
---- ---------- ----------- ----------- ------- --------
a NULL 33 55 0 1
b NULL 42 73 0 1
出版商有三個(gè)類(lèi)別,所有由CUBE運(yùn)算而生成行的是
名稱(chēng) 出版商 價(jià)格1 價(jià)格2 CHECK名稱(chēng) CHECK出版商
---- ---------- ----------- ----------- ------- --------
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
以及
NULL NULL 75 128 1 1
*/
SELECT
名稱(chēng),
出版商,
SUM(價(jià)格1) AS 價(jià)格1,
SUM(價(jià)格2) AS 價(jià)格2
FROM @T GROUP BY 名稱(chēng),出版商 WITH ROLLUP
/*
名稱(chēng) 出版商 價(jià)格1 價(jià)格2
---- ---------- ----------- -----------
a 北京 11 22
a 四川 22 33
a NULL 33 55
b 北京 10 20
b 昆明 20 30
b 四川 12 23
b NULL 42 73
NULL NULL 75 128
*/
posted on 2009-08-17 09:51
absolute 閱讀(17357)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
DataBase