首页
论坛
门户
空间
手机版
IXPUB
插件
收藏
设置
注册
登录
商店
搜索
培训
Wiki
Blog
归档
丛书
退出
ITPUB论坛
»
Oracle入门与认证
» GROUPING SETS、ROLLUP 和 CUBE 的執行計畫
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
评价
|
打印
|
推荐
|
订阅
|
收藏
标题:
[转载]
GROUPING SETS、ROLLUP 和 CUBE 的執行計畫
hotiice
版主
精华贴数 10
个人空间
0
技术积分 16699 (62)
社区积分 1796 (648)
注册日期 2004-9-9
论坛徽章:21
#1
使用道具
发表于 2008-6-26 10:45
GROUPING SETS、ROLLUP 和 CUBE 的執行計畫
GROUPING SETS、ROLLUP 和 CUBE 的執行計畫
[本主題是發行前的文件集,在未來的版本中可能有所變更。空白的主題則以預留位置表示。]
此主題描述在單一 GROUP BY 子句中有多個群組的查詢之查詢執行計畫。描述的計畫是由下列 GROUP BY 陳述式類型所產生的:
GROUP BY...WITH ROLLUP
GROUP BY...WITH CUBE
GROUP BY...
,
GROUPING SETS
(
...
),
...
GROUP BY...
,
CUBE
(
...
),
...
GROUP BY...
,
ROLLUP
(
...
),
...
GROUP BY 中的彙總執行計畫
當出現 GROUP BY 子句時,不論其種類為何,在最佳化的早期,複雜的彙總就會分解成簡單的彙總。下列 Transact-SQL 陳述式提供此一內部轉換的簡化圖例。在下列範例中,第一個
SELECT
陳述式轉換成第二個:
複製程式碼
SELECT a, AVG(x) FROM t GROUP BY a WITH ROLLUPSELECT a, SUM(x)/COUNT(x) FROM t GROUP BY a WITH ROLLUP
無法使用多個群組語法表示純量彙總。多個群組語法可用於指定單一群組集。下列陳述式是相同的:
複製程式碼
SELECT a, b, c, SUM(x) FROM v53GROUP BY GROUPING SETS ((a, b, c))
複製程式碼
SELECT a, b, c, SUM(x) FROM v53GROUP BY a, b, c
除了不能使用多個群組語法表示純量彙總之外,下列陳述式的執行計畫會與 GROUP BY 的執行計畫相同。
下列陳述式 (它是純量彙總) 會傳回一個有 NULL 值的資料列:
複製程式碼
SELECT SUM(x) FROM v53 WHERE a = a + 1
下列陳述式不會傳回任何資料列:
複製程式碼
SELECT SUM(x) FROM v53 WHERE a = a + 1 GROUP BY GROUPING SETS (())SELECT SUM(x) FROM v53 WHERE a = a + 1GROUP BY(x-x)
ROLLUP 執行計畫
在 SQL Server 2008 之前的 SQL Server 版本,無法區別執行程序表中的 ROLLUP 咚阕雍鸵话阗Y料流彙總咚阕印 SQL Server 2008 開始,在執行程序表中的
Stream Aggregate
節點裡,加入了 RollupInfo 做為區分元素。<RollupInfo> 會出現在 XML 執行程序表和屬性視窗中,但當您的指標停留在咚阕由蠒r,它則不會出現。例如,ROLLUP 咚阕佑幸粋稱為 <RollupInfo> 的元素:
<RollupInfo HighestLevel="3">
<ROLLUPLevel Number="0" />
<ROLLUPLevel Number="2" />
<ROLLUPLevel Number="3" />
</RollupInfo>
不論資料流彙總是否為 ROLLUP,<RollupInfo> 元素都會出現在 XML 執行程序表中,也就是說,它會輸出多個群組。執行程序表的文字不會改變。
ROLLUP 的範例查詢和執行計畫下列範例查詢 (即 Q1) 會傳回 2004 年 Adventure Works Cycles 的彙總銷售。銷售會先依照地區,接著依照日子進行分組。若要產生實際執行計畫,在 SQL Server Management Studio 的查詢編輯器中,執行下列查詢。此計畫會在稍後的<Q1 查詢的實際執行計畫>章節中描述。
複製程式碼
USE AdventureWorksDW;GOWITH v1 AS(SELECT t.SalesTerritoryRegion theregion ,d.WeekNumberOfYear theweek ,d.DayNumberOfYear theday ,f.SalesAmount salesFROM dbo.FactInternetSales f INNER JOIN dbo.DimTime d ON f.OrderDateKey = d.TimeKey INNER JOIN dbo.DimSalesTerritory t ON f.SalesTerritoryKey = t.SalesTerritoryKeyWHERE d.calendaryear = 2004)SELECT theregion, theweek, theday, SUM(sales) AS sumsalesFROM v1GROUP BY GROUPING SETS ((), (theregion), (theregion, theweek, theday))OPTION (MAXDOP 1);GO
Q1 查詢的實際執行計畫Q1 查詢可使用單一 ROLLUP 作業完成。不過,GROUPING SETS 查詢通常需要多個 ROLLUP 作業 (這些作業的結果會由 UNION 加以結合)。
Q1 的圖形化執行計畫,在資料列中有兩個資料流彙總作業。左方的資料流彙總是 ROLLUP 咚阕樱哂 RollupInfo 元素。在 RollupInfo 元素中的資訊,完整描述了 ROLLUP 作業的行為。在 GroupBy 元素中列出了資料流彙總的三個群組元素,因此 HighestLevel = 3。有四種可能的 ROLLUPLevel:從 0 到 HighestLevel。在此範例中,最高為 3。層級為 0 的 ROLLUP 是基底群組 (即 theregion、theweek 和 theday)。它就是資料流彙總一般會在計畫中的這個位置輸出的項目。每個更高的層級 (層級 L) 是 HighestLevel-L 大小的 GroupBy 清單前置的群組。層級 1 代表 (theregion, theweek),在此情況下不需要。這裡的層級 2 和 3 分別表示輸出群組 (theregion) 和 ()。
單一 ROLLUP 計畫先前 Q1 查詢的執行計畫,對單一 ROLLUP 作業來說是很常見的:
有一個對應 FROM 和 WHERE 子句的輸入查詢。
有一個計算 GROUP BY a、b 和 c 的資料流彙總。
此彙總可以是本機或全域的,也可以是資料分割平行。
此彙總可能會加上排序。
此彙總可能與索引檢視相符。
資料流彙總。
接著查詢處理器會篩選和計算 <select> 清單中的 HAVING 子句和 SELECT 子句的純量。
您可以利用下列方式取得單一 ROLLUP 計畫:
使用
ROLLUP
關鍵字:
複製程式碼
SELECT a, b, c, SUM(x) FROM v53GROUP BY ROLLUP(a, b, c)SELECT a, b, c, SUM(x) FROM v53GROUP BY a, b, c WITH ROLLUP
使用任何其他的多個群組語法,以兩個或多個群組指定 ROLLUP 作業或 ROLLUP 作業的一部分。SQL Server 會分析群組,判斷它們是否由單一的 ROLLUP 作業所涵蓋 (也就是它們是否形成包含集的鏈結)。
複製程式碼
SELECT a, b, c, SUM(x) FROM v53GROUP BY GROUPING SETS ((), (a), (a, b, c))
單一維度 Cube 是 ROLLUP 作業:
複製程式碼
SELECT a, SUM(x) FROM v53GROUP BY a WITH CUBE
先彙總,然後 ROLLUP在 SQL Server 中,除了一般的 GROUP BY 之外,ROLLUP 咚阕佑肋h當做個別的咚阕觼韺嵶鳌_@不是絕對必要的。請考慮下列程式碼範例。
複製程式碼
SELECT MAX(x) z1, COUNT(x) z2 FROM v53GROUP BY a, b WITH ROLLUP
此查詢分成兩個步驟來處理。請注意,多個基底彙總
max
的
max
是
max
,而多個基底彙總
count
的
sum
,則是
count
:
複製程式碼
'base aggregation': compute y1 = max(x), y2 = count(x)Rollup: compute z1 = max(y1), z2 = sum(y2)
保持分割基底彙總的好處在於,可以用來與索引檢視進行比對,也可以平行處理或發送以追蹤聯結。
多個 ROLLUP 執行計畫如果 ROLLUP 咚阕記]有涵蓋 GROUPING SETS,SQL Server 會在集與 UNION ALL 結合時,建立接近最小的 ROLLUP 作業組,以涵蓋 GROUPING SETS。下列查詢需要三個 ROLLUP 作業才能涵蓋 GROUPING SETS:
複製程式碼
SELECT a, b, c, SUM(x) FROM v53GROUP BYGROUPING SETS ((), (a), (b), (c), (a, b), (a, c), (b,c))
ROLLUP 作業的其中一個可能的結合如下:
複製程式碼
ROLLUP 1 covers (), (a), (a, b)ROLLUP 2 covers (c), (a, c)ROLLUP 3 covers (b), (b, c)
單一 ROLLUP 計畫如同在先前的<Q1 查詢的實際執行計畫>章節中所描述的,單一 ROLLUP 計畫依序擁有兩個彙總計算子。右方的資料流或雜湊彙總是基底彙總。在左方的第二個資料流彙總計算 ROLLUP 咚阕印
CUBE 執行計畫
本章節提供您可以執行的範例程式碼,以產生 CUBE 咚阕佑玫墓犂龑嶋H執行計畫。
CUBE 的範例查詢和執行計畫若要產生實際執行計畫,在 Management Studio 的查詢編輯器中,執行下列查詢 (即 Q2)。
複製程式碼
USE AdventureWorksDW;GOSELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey ,SUM (SalesAmount)FROM dbo.FactInternetSalesGROUP BY CUBE (ProductKey, OrderDateKey, DueDateKey, ShipDateKey);GO
Q2 查詢的實際執行計畫
[實際執行計畫]
的第一行中包含了輸入。這些輸入在儲存之後,會傳遞給基底彙總。由每個分支進行多工緩衝與讀取。每個分支會計算 ROLLUP 作業 (在它前方會加上選擇性排序)。
此查詢比下面的 Q3 查詢多包含一個資料行。針對基底彙總進行多工緩衝處理,比起在每個分支上重新讀取輸入,是更具成本效益的方式。具有較多分支的查詢較適合基底彙總計畫。
不具基底彙總或多工緩衝處理的 CUBE 之簡單和查詢執行計畫若要產生實際執行計畫,在 Management Studio 的查詢編輯器中,執行下列查詢 (即 Q3)。
複製程式碼
USE AdventureWorksDW;GOSELECT ProductKey, OrderDateKey, DueDateKey, SUM (SalesAmount) FROM dbo.FactInternetSalesGROUP BY CUBE (ProductKey, OrderDateKey, DueDateKey);GO
Q3 查詢的實際執行計畫此查詢建立多個群組計畫的不同樣式,基本上為 UNION ALL 方案。在此計畫中,不存在基底彙總或多工緩衝處理。群組集劃分為幾個單一的串連 ROLLUP 計畫。
Naïve CUBE 的簡單和查詢執行計畫若要產生實際執行計畫,在 Management Studio 的查詢編輯器中,執行下列查詢 (即 Q4)。
複製程式碼
USE AdventureWorksDW;GOSELECT ProductKey, OrderDateKey, DueDateKey, SUM (DISTINCT SalesAmount) FROM dbo.FactInternetSalesGROUP BY CUBE (ProductKey, OrderDateKey, DueDateKey);GO
Q4 查詢的實際執行計畫此查詢產生有多個群組和任何相異彙總的 Naïve CUBE
[實際執行計畫]
。
每個分支計算單一群組。沒有任何基底彙總。這個計劃並不是非常有效率。如果在 SELECT <select> 清單中有多個彙總,而其中有些是相異彙總,每個分支就能擁有聯結及多工緩衝處理。這與在相異彙總中只有單一群組的情況是類似的。
請參閱
概念
搭配 ROLLUP、CUBE 和 GROUPING SETS 使用 GROUP BY
GROUPING SETS 對等項目
其他資源
GROUP BY (Transact-SQL)
GROUP BY 錯誤疑難排解
GROUPING (Transact-SQL)
GROUPING_ID (Transact-SQL)
說明及資訊
取得 SQL Server 2008 協助
__________________
①②⑧
只看该作者
hotiice
版主
精华贴数 10
个人空间
0
技术积分 16699 (62)
社区积分 1796 (648)
注册日期 2004-9-9
论坛徽章:21
#2
使用道具
发表于 2008-6-26 10:48
SQL Server 2008 線上叢書 (2008 年 5 月)
搭配 ROLLUP、CUBE 和 GROUPING SETS 使用 GROUP BY
[本主題是發行前的文件集,在未來的版本中可能有所變更。空白的主題則以預留位置表示。]
ROLLUP、CUBE 和 GROUPING SETS 咚阕邮 GROUP BY 子句的擴充。ROLLUP、CUBE 或 GROUPING SETS 咚阕涌梢援a生與使用 UNION ALL 結合單一群組查詢時相同的結果;不過,如果只使用 GROUP BY 咚阕拥钠渲兄唬ǔ8行省
GROUPING SETS 咚阕赢a生的結果集,與使用簡單 GROUP BY、ROLLUP 或 CUBE 咚阕铀a生的相同。當不需要使用完整 ROLLUP 或 CUBE 咚阕赢a生的所有其他群組時,您可以使用 GROUPING SETS,只指定您想要的群組。GROUPING SETS 清單可包含重複群組;而且,當 GROUPING SETS 搭配 ROLLUP 和 CUBE 使用時,它可能也會產生重複群組。只要使用 UNION ALL,重複群組就會保留原樣。
[tr]
附註:[/tr]
CUBE、ROLLUP 和 GROUPING SETS 不支援 CHECKSUM_AGG 函數。
複合與串連元素
在GROUPING SETS 清單中,括號內的多個資料行都視為單一的集。例如,在子句
GROUP BY GROUPING SETS ((Colum1, Column2), Column3, Column4)
中,
Column1
和
Column2
視為一個資料行。如需如何搭配複合元素使用 GROUPING SETS 的範例,請參閱本主題稍後的範例 H。
當 GROUPING SETS 清單在括號內包含多個集時,集的輸出會串連起來,以逗號分隔。結果集是群組集的交叉乘積或笛卡兒乘積。如需如何搭配串連 ROLLUP 作業使用 GROUP BY 的範例,請參閱本主題稍後的範例 D。
比較 OLAP 維度的 ROLLUP 和 CUBE
使用 ROLLUP 和 CUBE 咚阕拥牟樵儯瑫a生某些與 OLAP 應用程式相同的結果集,並執行某些相同的計算。CUBE 咚阕訒a生可用於跨表格式報表的結果集。ROLLUP 作業可計算相當於 OLAP 維度或階層架構的結果。
例如,給定具有年、月,以及日階層或屬性的時間維度,下列
ROLLUP
作業會產生下列群組。
[tr]Operation Groupings [/tr]
複製程式碼
ROLLUP (DATEPART(yyyy,OrderDate) ,DATEPART(mm,OrderDate) ,DATEPART(dd,OrderDate))
year, month, day
year, month
year
()
給定串連年、月,以及日層級的時間維度,並同時具有地區和城市層級的位置維度的下列
ROLLUP
作業,會輸出下列群組。
[tr]Operation Groupings [/tr]
複製程式碼
ROLLUP (region, city),ROLLUP (DATEPART(yyyy,OrderDate) ,DATEPART(mm,OrderDate) ,DATEPART(dd,OrderDate))
region, city, year, month, day
region, city, year, month
region, city, year
region, city
region, year, month, day
region, year, month
region, year
region
year, month, day
year, month
year
()
位置與時間維度皆為同樣層級的
CUBE
作業,會輸出下列群組。
[tr]Operation Grouping [/tr]
複製程式碼
CUBE (region, city ,DATEPART(yyyy,OrderDate) ,DATEPART(mm,OrderDate) ,DATEPART(dd,OrderDate))
region, city, year, month, day
region, city, year, month
region, city, year
region, city
region, city, month, da
y
region, city, month
region, city, day
region, city, year, day
region, city, day
region, year, month, day
region, year, month
region, year
region, month, day
region, month
region, year, day
region, day
region
city, year, month, day
city, year, month
city, year
city, month, day
city, month
city, year, day
city, day
year, month, day
year, month
year
year, day
month, day
month
day
()
結果集中的 NULL
在由 GROUP BY 咚阕赢a生的結果集中,NULL 有下列用途:
如果群組資料行包含 NULL,系統會把所有 null 值都視為相等,並將它們放入一個 NULL 群組中。
當資料行在資料列中進行彙總,該資料行的值就會顯示為 NULL。
下列範例使用
GROUPING
功能,顯示 NULL 的兩種用途。在資料行中的 null 都已分組後,資料列中的
UNKNOWN
會取代
NULL
。在
NULL
指示彙總中已包含某個資料行後,資料行中的
ALL
會取代
NULL
。
複製程式碼
USE tempdb;GOCREATE TABLE dbo.GroupingNULLS ( Store nvarchar(19) ,SaleYear nvarchar(4) ,SaleMonth nvarchar (7))INSERT INTO dbo.GroupingNULLS VALUES(NULL,NULL,'January')INSERT INTO dbo.GroupingNULLS VALUES(NULL,'2002',NULL)INSERT INTO dbo.GroupingNULLS VALUES(NULL,NULL,NULL)INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling',NULL ,'January');INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling','2002',NULL);INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling',NULL ,NULL
INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling',NULL,'January');INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling','2003','Febuary');INSERT INTO dbo.GroupingNULLS VALUES('Active Cycling','2003',NULL);INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store','2002','January');INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store','2002',NULL);INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store',NULL,NULL);INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store','2003','January');INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store','2003','Febuary');INSERT INTO dbo.GroupingNULLS VALUES('Mountain Bike Store','2003','March');SELECT ISNULL(Store, CASE WHEN GROUPING(Store) = 0 THEN 'UNKNOWN' ELSE 'ALL' END) AS Store ,ISNULL(CAST(SaleYear AS nvarchar(7)), CASE WHEN GROUPING(SaleYear)= 0 THEN 'UNKNOWN' ELSE 'ALL' END) AS SalesYear ,ISNULL(SaleMonth, CASE WHEN GROUPING(SaleMonth) = 0 THEN 'UNKNOWN' ELSE 'ALL'END) AS SalesMonth ,COUNT(*) AS CountFROM dbo.GroupingNULLS GROUP BY ROLLUP(Store, SaleYear, SaleMonth);
以下為結果集:
[tr]Store SalesYear SalesMonth Count [/tr]
Unknown
Unknown
Unknown
1
Unknown
Unknown
January
1
Unknown
Unknown
ALL
2
Unknown
2002
Unknown
1
Unknown
2002
ALL
1
Unknown
ALL
ALL
3
Active Cycling
Unknown
Unknown
1
Active Cycling
Unknown
January
2
Active Cycling
Unknown
ALL
3
Active Cycling
2002
未知
1
Active Cycling
2002
ALL
1
Active Cycling
2003
Unknown
1
Active Cycling
2003
Febuary
1
Active Cycling
2003
ALL
2
Active Cycling
ALL
ALL
6
Mountain Bike Store
Unknown
Unknown
1
Mountain Bike Store
Unknown
ALL
1
Mountain Bike Store
2002
Unknown
1
Mountain Bike Store
2002
January
1
Mountain Bike Store
2002
ALL
2
Mountain Bike Store
2003
Febuary
1
Mountain Bike Store
2003
January
1
Mountain Bike Store
2003
March
1
Mountain Bike Store
2003
ALL
3
Mountain Bike Store
ALL
ALL
6
ALL
ALL
ALL
15
範例
本節中的範例使用 SUM 彙總函數,如此就能比較結果集。也可以用其他彙總函數來計算不同的摘要。
A. 使用簡單的 GROUP BY在下列範例中,簡單的
GROUP BY
傳回的結果集,可與範例 B 到 K 的結果集進行比較。這些範例使用具有相同
SELECT
陳述式的
GROUP BY
咚阕印
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonIDORDER BY T.[Group], T.CountryRegionCode ,S.Name,H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
Europe
DE
Versatile Sporting Goods Company
284
859.232
Europe
DE
Versatile Sporting Goods Company
289
17691.83
Europe
FR
Spa and Exercise Outfitters
284
32774.36
Europe
FR
Spa and Exercise Outfitters
286
246272.4
B. 使用 GROUP BY ROLLUP在下列範例中,
ROLLUP
咚阕訒䝼骰匕铝腥航M的結果集:
Region
、
Country
、
Store
和
SalesPersonID
Region
、
Country
和
Store
RegionRegion
和
CountryCountry
Region
總計
由
ROLLUP
所產生的群組數目,等於在
ROLLUP
清單中的資料行加上總計群組的數目。群組中的資料列數,由群組資料行中的唯一組合值的數目來決定。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales' FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY ROLLUP( T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID)ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
Europe
NULL
NULL
NULL
297597.8
Europe
DE
NULL
NULL
18551.07
Europe
DE
Versatile Sporting Goods Company
NULL
18551.07
Europe
DE
Versatile Sporting Goods Company
284
859.232
Europe
DE
Versatile Sporting Goods Company
289
17691.83
Europe
FR
NULL
NULL
279046.8
Europe
FR
Spa and Exercise Outfitters
NULL
279046.8
Europe
FR
Spa and Exercise Outfitters
284
32774.36
Europe
FR
Spa and Exercise Outfitters
286
246272.4
C. 搭配相反資料行順序使用 GROUP BY ROLLUP在下列範例中,
ROLLUP
咚阕訒䝼骰匕铝腥航M的結果集:
SalesPersonID
、
Store
、
Country
和
Region
SalesPersonID
、
Store
和
Country
SalesPersonID
和
Store
SalesPersonID
總計
在
ROLLUP
清單中的資料行與在範例 B 中的相同,只是順序相反。資料行是由左到右積存,因此,順序會影響到群組。在結果集中的資料列數可能與資料行順序不同。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY ROLLUP( H.SalesPersonID, S.Name, T.CountryRegionCode, T.[Group])ORDER BY H.SalesPersonID, S.Name, T.CountryRegionCode, T.[Group];
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
NULL
NULL
NULL
284
33633.59
NULL
NULL
Spa and Exercise Outfitters
284
32774.36
NULL
FR
Spa and Exercise Outfitters
284
32774.36
Europe
FR
Spa and Exercise Outfitters
284
32774.36
NULL
NULL
Versatile Sporting Goods Company
284
859.232
NULL
DE
Versatile Sporting Goods Company
284
859.232
Europe
DE
Versatile Sporting Goods Company
284
859.232
NULL
NULL
NULL
286
246272.4
NULL
NULL
Spa and Exercise Outfitters
286
246272.4
NULL
FR
Spa and Exercise Outfitters
286
246272.4
Europe
FR
Spa and Exercise Outfitters
286
246272.4
NULL
NULL
NULL
289
17691.83
NULL
NULL
Versatile Sporting Goods Company
289
17691.83
NULL
DE
Versatile Sporting Goods Company
289
17691.83
Europe
DE
Versatile Sporting Goods Company
289
17691.83
D. 搭配串連的 ROLLUP 作業使用 GROUP BY在下列範例中,傳回兩項
ROLLUP
作業的交叉乘積。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,DATEPART(yyyy,OrderDate) AS 'Year' ,DATEPART(mm,OrderDate) AS 'Month' ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND DATEPART(yyyy,OrderDate) = '2004'GROUP BY ROLLUP(T.[Group], T.CountryRegionCode) ,ROLLUP(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate))ORDER BY T.[Group], T.CountryRegionCode ,DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate);
以下為結果集:
[tr]Region Country Year Month Total Sales [/tr]
NULL
NULL
NULL
NULL
3031201
NULL
NULL
2004
NULL
3031201
NULL
NULL
2004
1
208553.6
NULL
NULL
2004
2
819466.6
NULL
NULL
2004
3
298579.1
NULL
NULL
2004
4
294427.7
NULL
NULL
2004
5
1070679
NULL
NULL
2004
6
339495.1
Europe
NULL
NULL
NULL
3031201
Europe
NULL
2004
NULL
3031201
Europe
NULL
2004
1
208553.6
Europe
NULL
2004
2
819466.6
Europe
NULL
2004
3
298579.1
Europe
NULL
2004
4
294427.7
Europe
NULL
2004
5
1070679
Europe
NULL
2004
6
339495.1
Europe
DE
NULL
NULL
1196260
Europe
DE
2004
NULL
1196260
Europe
DE
2004
1
155066.2
Europe
DE
2004
2
197801.8
Europe
DE
2004
3
180977.7
Europe
DE
2004
4
222683.4
Europe
DE
2004
5
258962
Europe
DE
2004
6
180769.1
Europe
FR
NULL
NULL
1834941
Europe
FR
2004
NULL
1834941
Europe
FR
2004
1
53487.37
Europe
FR
2004
2
621664.9
Europe
FR
2004
3
117601.4
Europe
FR
2004
4
71744.28
Europe
FR
2004
5
811716.9
Europe
FR
2004
6
158726
E. 使用 GROUP BY CUBE在下列範例中,
CUBE
咚阕觽骰刂Y果集的一個群組,會是
CUBE
清單與總計群組中資料行的所有可能組合。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY CUBE( T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID)ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
NULL
NULL
NULL
284
33633.59
NULL
NULL
NULL
286
246272.4
NULL
NULL
NULL
289
17691.83
NULL
NULL
Spa and Exercise Outfitters
NULL
279046.8
NULL
NULL
Spa and Exercise Outfitters
284
32774.36
NULL
NULL
Spa and Exercise Outfitters
286
246272.4
NULL
NULL
Versatile Sporting Goods Company
NULL
18551.07
NULL
NULL
Versatile Sporting Goods Company
284
859.232
NULL
NULL
Versatile Sporting Goods Company
289
17691.83
NULL
DE
NULL
NULL
18551.07
NULL
DE
NULL
284
859.232
NULL
DE
NULL
289
17691.83
NULL
DE
Versatile Sporting Goods Company
NULL
18551.07
NULL
DE
Versatile Sporting Goods Company
284
859.232
NULL
DE
Versatile Sporting Goods Company
289
17691.83
NULL
FR
NULL
NULL
279046.8
NULL
FR
NULL
284
32774.36
NULL
FR
NULL
286
246272.4
NULL
FR
Spa and Exercise Outfitters
NULL
279046.8
NULL
FR
Spa and Exercise Outfitters
284
32774.36
NULL
FR
Spa and Exercise Outfitters
286
246272.4
Europe
NULL
NULL
NULL
297597.8
Europe
NULL
NULL
284
33633.59
Europe
NULL
NULL
286
246272.4
Europe
NULL
NULL
289
17691.83
Europe
NULL
Spa and Exercise Outfitters
NULL
279046.8
Europe
NULL
Spa and Exercise Outfitters
284
32774.36
Europe
NULL
Spa and Exercise Outfitters
286
246272.4
Europe
NULL
Versatile Sporting Goods Company
NULL
18551.07
Europe
NULL
Versatile Sporting Goods Company
284
859.232
Europe
NULL
Versatile Sporting Goods Company
289
17691.83
Europe
DE
NULL
NULL
18551.07
Europe
DE
NULL
284
859.232
Europe
DE
NULL
289
17691.83
Europe
DE
Versatile Sporting Goods Company
NULL
18551.07
Europe
DE
Versatile Sporting Goods Company
284
859.232
Europe
DE
Versatile Sporting Goods Company
289
17691.83
Europe
FR
NULL
NULL
279046.8
Europe
FR
NULL
284
32774.36
Europe
FR
NULL
286
246272.4
Europe
FR
Spa and Exercise Outfitters
NULL
279046.8
Europe
FR
Spa and Exercise Outfitters
284
32774.36
Europe
FR
Spa and Exercise Outfitters
286
246272.4
F. 搭配複合元素使用 CUBE在下列範例中,
CUBE
咚阕觽骰氐慕Y果集的一個群組,會是
CUBE
清單與總計群組中的資料行的所有可能組合。
針對已分組的資料行
(T.[Group], T.CountryRegionCode)
和
(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate))
,咚阕訉⒅暈閱我毁Y料行來處理。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,DATEPART(yyyy,OrderDate) AS 'Year' ,DATEPART(mm,OrderDate) AS 'Month' ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND DATEPART(yyyy,OrderDate) = '2004'GROUP BY CUBE( (T.[Group], T.CountryRegionCode) ,(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)))ORDER BY T.[Group], T.CountryRegionCode ,DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate);
以下為結果集:
[tr]Region Country Year Month Total Sales [/tr]
NULL
NULL
NULL
NULL
3031201
NULL
NULL
2004
1
208553.6
NULL
NULL
2004
2
819466.6
NULL
NULL
2004
3
298579.1
NULL
NULL
2004
4
294427.7
NULL
NULL
2004
5
1070679
NULL
NULL
2004
6
339495.1
Europe
DE
NULL
NULL
1196260
Europe
DE
2004
1
155066.2
Europe
DE
2004
2
197801.8
Europe
DE
2004
3
180977.7
Europe
DE
2004
4
222683.4
Europe
DE
2004
5
258962
Europe
DE
2004
6
180769.1
Europe
FR
NULL
NULL
1834941
Europe
FR
2004
1
53487.37
Europe
FR
2004
2
621664.9
Europe
FR
2004
3
117601.4
Europe
FR
2004
4
71744.28
Europe
FR
2004
5
811716.9
Europe
FR
2004
6
158726
G. 搭配 GROUPING SETS 使用 GROUP BY在下列範例中,
GROUPING SETS
咚阕佑兴膫群組,各位於
SELECT
清單中的每個資料行裡。咚阕釉
Region
、
Country
、
Store,
和
SalesPersonID
資料行中,針對每個唯一值傳回一個資料列。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY GROUPING SETS (T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID)ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
284
33633.59
NULL
NULL
NULL
286
246272.4
NULL
NULL
NULL
289
17691.83
NULL
NULL
Spa and Exercise Outfitters
NULL
279046.8
NULL
NULL
Versatile Sporting Goods Company
NULL
18551.07
NULL
DE
NULL
NULL
18551.07
NULL
FR
NULL
NULL
279046.8
Europe
NULL
NULL
NULL
297597.8
H. 搭配複合元素使用 GROUPING SETS在下列範例中,
GROUPING SETS
清單包含兩個複合元素:
(T.[Group], T.CountryRegionCode)
和
(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate))
。每個複合元素會被視為一個資料行。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,DATEPART(yyyy,OrderDate) AS 'Year' ,DATEPART(mm,OrderDate) AS 'Month' ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND DATEPART(yyyy,OrderDate) = '2004'GROUP BY GROUPING SETS( (T.[Group], T.CountryRegionCode) ,(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)))ORDER BY T.[Group], T.CountryRegionCode ,DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate);
以下為結果集:
[tr]Region Country Year Month Total Sales [/tr]
NULL
NULL
2004
1
208553.6
NULL
NULL
2004
2
819466.6
NULL
NULL
2004
3
298579.1
NULL
NULL
2004
4
294427.7
NULL
NULL
2004
5
1070679
NULL
NULL
2004
6
339495.1
Europe
DE
NULL
NULL
1196260
Europe
FR
NULL
NULL
1834941
I. 搭配多個 GROUPING SETS 使用 GROUP BY在下列範例中,
GROUPING SETS
清單有五個元素。結果集中會有包含下列元素的一個資料列:
在
Region
和
Country
資料行中的每個唯一組合值
在
Store
資料行中的每個唯一值
在
SalesPersonID
和
Region
資料行中的每個唯一組合值
在
SalesPersonID
資料行中的每個唯一值
總計
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY GROUPING SETS( (T.[Group], T.CountryRegionCode) ,(S.Name) ,(H.SalesPersonID,T.[Group]) ,(H.SalesPersonID) ,())ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
NULL
NULL
NULL
284
33633.59
NULL
NULL
NULL
286
246272.4
NULL
NULL
NULL
289
17691.83
NULL
NULL
Spa and Exercise Outfitters
NULL
279046.8
NULL
NULL
Versatile Sporting Goods Company
NULL
18551.07
Europe
NULL
NULL
284
33633.59
Europe
NULL
NULL
286
246272.4
Europe
NULL
NULL
289
17691.83
Europe
DE
NULL
NULL
18551.07
Europe
FR
NULL
NULL
279046.8
J. 搭配部分 GROUP BY 清單中的 ROLLUP,使用 GROUPING SETS在下列範例中,
GROUPING SETS
清單包含
T.[Group]
和
T.CountryRegionCode
資料行的群組,以及
S.Name
和
H.SalesPersonID
資料行的
ROLLUP
。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY GROUPING SETS( T.[Group], T.CountryRegionCode ,ROLLUP(S.Name, H.SalesPersonID))ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
NULL
NULL
Spa and Exercise Outfitters
NULL
279046.8
NULL
NULL
Spa and Exercise Outfitters
284
32774.36
NULL
NULL
Spa and Exercise Outfitters
286
246272.4
NULL
NULL
Versatile Sporting Goods Company
NULL
18551.07
NULL
NULL
Versatile Sporting Goods Company
284
859.232
NULL
NULL
Versatile Sporting Goods Company
289
17691.83
NULL
DE
NULL
NULL
18551.07
NULL
FR
NULL
NULL
279046.8
Europe
NULL
NULL
NULL
297597.8
K. 搭配部分 GROUP BY 清單中的 CUBE,使用 GROUPING SETS在下列範例中,
GROUPING SETS
清單包含
T.[Group]
和
T.CountryRegionCode
資料行的群組,以及
S.Name
和
H.SalesPersonID
資料行的
CUBE
。
複製程式碼
USE AdventureWorks;GOSELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country' ,S.Name AS N'Store', H.SalesPersonID ,SUM(TotalDue) AS N'Total Sales'FROM Sales.Customer C INNER JOIN Sales.Store S ON C.CustomerID = S.CustomerID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON S.CustomerID = H.CustomerIDWHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN(N'DE', N'FR') AND H.SalesPersonID IN(284, 286, 289) AND SUBSTRING(S.Name,1,4)IN(N'Vers', N'Spa ')GROUP BY GROUPING SETS( T.[Group], T.CountryRegionCode ,CUBE(S.Name, H.SalesPersonID))ORDER BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID;
以下為結果集:
[tr]Region Country Store SalesPersonID Total Sales [/tr]
NULL
NULL
NULL
NULL
297597.8
NULL
NULL
NULL
284
33633.59
NULL
NULL
NULL
286
246272.4
NULL
NULL
NULL
289
17691.83
NULL
NULL
Spa and Exercise Outfitters
NULL
279046.8
NULL
NULL
Spa and Exercise Outfitters
284
32774.36
NULL
NULL
Spa and Exercise Outfitters
286
246272.4
NULL
NULL
Versatile Sporting Goods Company
NULL
18551.07
NULL
NULL
Versatile Sporting Goods Company
284
859.232
NULL
NULL
Versatile Sporting Goods Company
289
17691.83
NULL
DE
NULL
NULL
18551.07
NULL
FR
NULL
NULL
279046.8
Europe
NULL
NULL
NULL
297597.8
請參閱
概念
GROUPING SETS 對等項目
其他資源
GROUP BY (Transact-SQL)
GROUPING (Transact-SQL)
GROUPING_ID (Transact-SQL)
GROUP BY 錯誤疑難排解
說明及資訊
取得 SQL Server 2008 協助
__________________
①②⑧
只看该作者
投票
交易
悬赏
活动
相关内容
ITPUB论坛
≡ 数据库技术 ≡
> Oracle数据库管理
> Oracle开发
> Oracle Developer Suite
> Oracle入门与认证
> Oracle专题深入讨论
> Oracle新技术/11g
> Oracle电子文档
> Oracle Application Server套件
> IBM数据库产品
> MS SQL Server
> Sybase管理与开发
> MySQL及其它开源数据库
> 内存数据库
> 数据仓库与数据挖掘
> 移动及嵌入式数据库
≡ 企业信息化 ≡
> ERP产品与实践
> CRM产品与实践
> HR产品与实践
> 物流
> 供应链
> 供应链建模与仿真
> 物流设备与系统工程
> 企业管理咨询
> 管理协同与办公自动化
> IT服务管理
> 数据中心建设
> ERP二次开发
> Oracle ERP
> EBS相关文档
> PeopleSoft与JDE
> SAP R/3
> SAP Business One开发与快速实施
> SAP财务及CRM
> SAP后勤及HR
> mySAP ERP
> 系统开发及跨应用设置
> SAP相关文档
> 国外其它ERP产品
> 国内ERP产品
≡ 开发技术 ≡
> Java入门与认证版
> Java web开发及框架技术
> Java企业开发
> ASP.NET【已迁移到微软开发技术论坛】
> .Net企业开发与应用【已迁移到微软开发技术论坛】
> WEB程序开发
> WEB 2.0技术
> 动态语言
> 移动与游戏开发
≡ 系统设计与项目管理 ≡
> 系统分析与UML
> 系统分析与UML精华区
> 项目管理
> 项目过程
> 软件测试
> 算法讨论与研究
≡ IBM软件技术园地 ≡
> IBM数据库产品
> Lotus
> Tivoli
> Websphere
> Rational
> 与SOA相关的IBM产品与技术
> IBM软件技术精英协会
> 软件技术精英活动专版
≡ 操作系统与硬件 ≡
> AIX及IBM产品【已迁移到IXPUB】
> HP-UX及HP产品【已迁移到IXPUB】
> Solaris及SUN产品【已迁移到IXPUB】
> Linux及其应用 【已迁移到IXPUB】
> 其它UNIX系统【已迁移到IXPUB】
> windows系统及微软相关产品 【已迁移到IXPUB】
> 存储设备与容灾技术 【已迁移到IXPUB】
> 服务器 【已迁移到IXPUB】
≡ 行业纵向讨论区 ≡
> IT业界评论与展望
> 政府与教育事业
> 中国政府信息主管联盟
> 电信行业
> 金融行业
> 医卫行业
> 制造行业
> 电力行业
> 信息安全与审计
≡ 会员交流 ≡
> IT职业生涯
> 招聘求职商务信息
> 体育世界
> 体育博彩专版
> 旅游,驴友
> 汽车世界
> 外语角
> 数码摄影
> 你的故事我的歌
> 音乐推荐区
> 电子图书与IT文档资料
> 软件交流
> 软件交流精华区
≡ ITPUB产品与服务 ≡
> ITPUB地面活动专版
> BLOG天地
> WIKI世界
> 授权用户区
> 站务管理
≡ 微软开发技术 ≡
> 开发工具和语言
> .NET Framework 相关
> Visual Basic/VB.net
> Visual C#
> Visual C++/vc.net
> Visual Studio
> .NET软件架构与模式
> .NET开发辅助工具及框架
> Web开发
> ASP.NET与AJAX
> Web相关技术讨论(IIS等)
> Silverlight 技术
> 微软企业级产品技术
> SQL Server
> windows server
> SharePoint
> Exchange Server
> Biztalk
> 嵌入式及移动开发
> Windows Embedded 嵌入式技术
> Windows 移动设备
> Office开发
> Microsoft office system
> Office Business Application
> 微软产品用户交流区
> .Net电子书籍&&书籍介绍
> .Net人才交流
技术积分榜
社区积分榜
徽章
电子杂志
会员
团队
统计
邮箱
游乐场
帮助
TOP
CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号
联系我们
法律顾问
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计