GROUP BY ROLLUP küp ve KÜMELERI GRUPLANDıRMA ile kullanma
GROUP BY uzantısı ROLLUP, küp ve gruplandırma KÜMELERİNİN işleçlerdir yan tümce.ROLLUP, küp veya KÜMELERİ GRUPLAMA işleçleri aynı sonucu olarak, UNION ALL tek Grup sorguları birleştirme kullandığınızda küme oluşturabilirsiniz; ancak GROUP BY işleçlerden birini kullanmak genellikle daha verimlidir.
gruplandırma KÜMELERİ işleç olarak basit bir GROUP BY, ROLLUP ya küp işlecini kullanarak oluşturulan aynı sonuç kümesi oluşturabilirsiniz.Tam bir küp ve ROLLUP işleç kullanılarak oluşturulan tüm grupları gereklidir, belirtmek istediğiniz gruplandırma için GROUPING KÜMELERİ'ni kullanabilirsiniz.Yinelenen grupları; gruplandırma ayarlar listesini içerebilir ve gruplandırma ayarlar ROLLUP küp ile kullanıldığında, yinelenen grupları oluşturabilirsiniz.UNION ALL kullanarak olacak şekilde yinelenen grupları korunur.
Not
küp, ROLLUP ve gruplandırma KÜMESİ CHECKSUM_AGG işlevini destekler.
Bileşik ve art arda eklenmiş öğeler
İç parantez içinde bulunan birden çok sütungruplandırma ayarlar listesini kabul tek bir küme.Örneğin, yan tümcesindeGROUP BY GROUPING SETS ((Colum1, Column2), Column3, Column4),Column1ve Column2kabul edilir bir sütun.Bir bileşik öğelerle gruplandırma kümelerini kullanma örneği için bu konuda daha sonra H örneğe bakın.
gruplandırma ayarlar listesini virgülle ayırarak, iç parantez içinde birden fazla kümesi içeren kümeleri çıkışı birleştirilmiş.Sonuç küme çapraz ürün veya Kartezyen ürün gruplandırma küme s.Bir GROUP BY ile art arda eklenmiş ROLLUP işlemleri nasıl örnek için bu konuda daha sonra D örneğe bakın.
ROLLUP ve karşılaştırma için OLAP boyutları küp
ROLLUP ve küp işleçlerini kullanan sorguları bazı aynı sonuç kümelerini oluşturmak ve bazı OLAP uygulamaları gibi aynı hesaplamalar yapabilirsiniz.küp işleç bir sonuç üretir küme kullanılabilecek için çizelgeleme raporlar.OLAP boyut veya hiyerarşi eşdeğer ROLLUP işlem hesaplayabilirsiniz.
Bir saat boyutu ile düzeyleri veya öznitelikleri yıl, ay ve gün; örneğin, verilen şuROLLUPişlemin oluşturduğu aşağıdaki grupları.
Operation: |
Gruplama |
---|---|
|
year, month, day year, month year () |
Belirli bir konuma boyut düzeyleri bölge ve Şehir birleştirilmiş saat boyutu düzeylerinin yıl, ay ve gün, şuROLLUPişlem verir aşağıdaki grupları.
Operation: |
Gruplama |
---|---|
|
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 () |
ACUBEkonum ve saat boyutları aynı düzeylerinden işlemi verir aşağıdaki grupları.
Operation: |
Gruplandırma |
---|---|
|
region, city, year, month, day region, city, year, month region, city, year region, city region, city, month, day 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 () |
Sonuç kümesi içinde NULL
NULL aşağıdaki kullanır grupla işleçleri tarafından oluşturulan sonuç kümesi vardır:
Bir gruplama sütun NULL içeren, tüm boş değerleri eşit olarak değerlendirilir ve bunlar bir NULL grup. Yerleştir
Bir satır, sütun birikir, sütunun değeri NULL gösterilir.
The following example uses the GROUPING function to show the two uses of NULL.UNKNOWN replaces NULL in rows where the nulls in a column have been grouped.ALL replaces NULL in a column where NULL indicates that a column has been included in an aggregation.
USE tempdb;
GO
CREATE TABLE dbo.GroupingNULLS (
Store nvarchar(19)
,SaleYear nvarchar(4)
,SaleMonth nvarchar (7))
INSERT INTO dbo.GroupingNULLS VALUES
(NULL,NULL,'January')
,(NULL,'2002',NULL)
,(NULL,NULL,NULL)
,('Active Cycling',NULL ,'January')
,('Active Cycling','2002',NULL)
,('Active Cycling',NULL ,NULL)
,('Active Cycling',NULL,'January')
,('Active Cycling','2003','Febuary')
,('Active Cycling','2003',NULL)
,('Mountain Bike Store','2002','January')
,('Mountain Bike Store','2002',NULL)
,('Mountain Bike Store',NULL,NULL)
,('Mountain Bike Store','2003','January')
,('Mountain Bike Store','2003','Febuary')
,('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 Count
FROM dbo.GroupingNULLS
GROUP BY ROLLUP(Store, SaleYear, SaleMonth);
Here is the result set.
Mağaza |
SalesYear |
SalesMonth |
Count |
---|---|---|---|
bilinmiyor |
bilinmiyor |
bilinmiyor |
1 |
bilinmiyor |
bilinmiyor |
Ocak |
1 |
bilinmiyor |
bilinmiyor |
ALL |
2 |
bilinmiyor |
2002 |
bilinmiyor |
1 |
bilinmiyor |
2002 |
ALL |
1 |
bilinmiyor |
ALL |
ALL |
3 |
Etkin geçiş yapma |
bilinmiyor |
bilinmiyor |
1 |
Etkin geçiş yapma |
bilinmiyor |
Ocak |
2 |
Etkin geçiş yapma |
bilinmiyor |
ALL |
3 |
Etkin geçiş yapma |
2002 |
bilinmiyor |
1 |
Etkin geçiş yapma |
2002 |
ALL |
1 |
Etkin geçiş yapma |
2003 |
bilinmiyor |
1 |
Etkin geçiş yapma |
2003 |
Febuary |
1 |
Etkin geçiş yapma |
2003 |
ALL |
2 |
Etkin geçiş yapma |
ALL |
ALL |
6 |
Dağ bisiklet deposu |
bilinmiyor |
bilinmiyor |
1 |
Dağ bisiklet deposu |
bilinmiyor |
ALL |
1 |
Dağ bisiklet deposu |
2002 |
bilinmiyor |
1 |
Dağ bisiklet deposu |
2002 |
Ocak |
1 |
Dağ bisiklet deposu |
2002 |
ALL |
2 |
Dağ bisiklet deposu |
2003 |
Febuary |
1 |
Dağ bisiklet deposu |
2003 |
Ocak |
1 |
Dağ bisiklet deposu |
2003 |
Mart |
1 |
Dağ bisiklet deposu |
2003 |
ALL |
3 |
Dağ bisiklet deposu |
ALL |
ALL |
6 |
ALL |
ALL |
ALL |
15 |
Örnekler
Böylece sonuç ayarlar bu bölümü kullanın TOPLA toplamak işlevini örneklerde karşılaştırılabilir.Diğer toplamak işlevleri, değişik özetleri hesaplamak için de kullanılabilir.
C.Bir basit grupla kullanma
Aşağıdaki örnekte, basitGROUP BYbir sonuç döndüreceği küme K. B örneklerle sonucu küme s karşılaştırmak içinAşağıdaki örnekleri kullanınGROUP BYişleçlerle aynıSELECTdeyim.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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.SalesPersonID
ORDER BY T.[Group], T.CountryRegionCode
,S.Name,H.SalesPersonID;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
Avrupa |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
B.GROUP BY ROLLUP kullanma
Aşağıdaki örnekte,ROLLUPişleci bir sonuç değerini küme içeren aşağıdaki gruplandırmalar:
Region,Country,Store, veSalesPersonID
Region,Country, veStore
Region, ve Country
Region
genel toplam
Grupları tarafından oluşturulan sayısıROLLUPsütun sayısı aynıROLLUPliste ve genel toplam gruplandırma.Bir satır sayısı, gruplandırma, sütundaki değerlerin benzersiz kombinasyon tarafından belirlenir.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
297597.8 |
Avrupa |
NULL |
NULL |
NULL |
297597.8 |
Avrupa |
DE |
NULL |
NULL |
18551.07 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
Avrupa |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
C.GROUP BY ROLLUP ile sütun sırasını kullanarak ters
Aşağıdaki örnekte,ROLLUPişleci bir sonuç değerini küme içeren aşağıdaki gruplandırmalar:
SalesPersonID,Store,Country, veRegion
SalesPersonID,Store, veCountry
SalesPersonID, ve Store
SalesPersonID
genel toplam
SütunROLLUPliste aynı örnekte B, ancak bunlar diğer sipariş.Sütun sağdan sola alınır; dolayısıyla gruplandırmalar sırasını etkiler.Satır sonuç küme sütun sırası ile değişebilir.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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];
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
297597.8 |
NULL |
NULL |
NULL |
284 |
33633.59 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
NULL |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
NULL |
NULL |
286 |
246272.4 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
NULL |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
NULL |
NULL |
NULL |
289 |
17691.83 |
NULL |
NULL |
Çok yönlü spor mal şirket |
289 |
17691.83 |
NULL |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
D.GROUP BY ile art arda eklenmiş ROLLUP işlemlerini kullanma
Aşağıdaki örnekte, iki çapraz çarpımıROLLUPişlemleri döndürülür.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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);
Here is the result set.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
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 |
Avrupa |
NULL |
NULL |
NULL |
3031201 |
Avrupa |
NULL |
2004 |
NULL |
3031201 |
Avrupa |
NULL |
2004 |
1 |
208553.6 |
Avrupa |
NULL |
2004 |
2 |
819466.6 |
Avrupa |
NULL |
2004 |
3 |
298579.1 |
Avrupa |
NULL |
2004 |
4 |
294427.7 |
Avrupa |
NULL |
2004 |
5 |
1070679 |
Avrupa |
NULL |
2004 |
6 |
339495.1 |
Avrupa |
DE |
NULL |
NULL |
1196260 |
Avrupa |
DE |
2004 |
NULL |
1196260 |
Avrupa |
DE |
2004 |
1 |
155066.2 |
Avrupa |
DE |
2004 |
2 |
197801.8 |
Avrupa |
DE |
2004 |
3 |
180977.7 |
Avrupa |
DE |
2004 |
4 |
222683.4 |
Avrupa |
DE |
2004 |
5 |
258962 |
Avrupa |
DE |
2004 |
6 |
180769.1 |
Avrupa |
FR |
NULL |
NULL |
1834941 |
Avrupa |
FR |
2004 |
NULL |
1834941 |
Avrupa |
FR |
2004 |
1 |
53487.37 |
Avrupa |
FR |
2004 |
2 |
621664.9 |
Avrupa |
FR |
2004 |
3 |
117601.4 |
Avrupa |
FR |
2004 |
4 |
71744.28 |
Avrupa |
FR |
2004 |
5 |
811716.9 |
Avrupa |
FR |
2004 |
6 |
158726 |
E.GROUP BY küp kullanma
Aşağıdaki örnekte,CUBEişleç tüm olası birleşimlerini sütunlar için gruplandırma sahip olan bir sonuç kümesi döndürenCUBEliste ve bir genel toplam gruplandırma.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
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 ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
NULL |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
NULL |
NULL |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
NULL |
Çok yönlü spor mal şirket |
289 |
17691.83 |
NULL |
DE |
NULL |
NULL |
18551.07 |
NULL |
DE |
NULL |
284 |
859.232 |
NULL |
DE |
NULL |
289 |
17691.83 |
NULL |
DE |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
NULL |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
NULL |
FR |
NULL |
NULL |
279046.8 |
NULL |
FR |
NULL |
284 |
32774.36 |
NULL |
FR |
NULL |
286 |
246272.4 |
NULL |
FR |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
Avrupa |
NULL |
NULL |
NULL |
297597.8 |
Avrupa |
NULL |
NULL |
284 |
33633.59 |
Avrupa |
NULL |
NULL |
286 |
246272.4 |
Avrupa |
NULL |
NULL |
289 |
17691.83 |
Avrupa |
NULL |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
Avrupa |
NULL |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
Avrupa |
NULL |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
Avrupa |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
Avrupa |
NULL |
Çok yönlü spor mal şirket |
284 |
859.232 |
Avrupa |
NULL |
Çok yönlü spor mal şirket |
289 |
17691.83 |
Avrupa |
DE |
NULL |
NULL |
18551.07 |
Avrupa |
DE |
NULL |
284 |
859.232 |
Avrupa |
DE |
NULL |
289 |
17691.83 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
284 |
859.232 |
Avrupa |
DE |
Çok yönlü spor mal şirket |
289 |
17691.83 |
Avrupa |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
FR |
NULL |
284 |
32774.36 |
Avrupa |
FR |
NULL |
286 |
246272.4 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
Avrupa |
FR |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
F.küp bileşik öðelerle kullanmak
Aşağıdaki örnekte,CUBEişleç tüm olası birleşimlerini sütunlar için gruplandırma sahip olan bir sonuç kümesi döndüren CUBEliste ve bir genel toplam gruplandırma.
işleç Gruplandırılmış sütunların işler (T.[Group], T.CountryRegionCode)ve(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate))her tek bir sütun.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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);
Here is the result set.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
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 |
Avrupa |
DE |
NULL |
NULL |
1196260 |
Avrupa |
DE |
2004 |
1 |
155066.2 |
Avrupa |
DE |
2004 |
2 |
197801.8 |
Avrupa |
DE |
2004 |
3 |
180977.7 |
Avrupa |
DE |
2004 |
4 |
222683.4 |
Avrupa |
DE |
2004 |
5 |
258962 |
Avrupa |
DE |
2004 |
6 |
180769.1 |
Avrupa |
FR |
NULL |
NULL |
1834941 |
Avrupa |
FR |
2004 |
1 |
53487.37 |
Avrupa |
FR |
2004 |
2 |
621664.9 |
Avrupa |
FR |
2004 |
3 |
117601.4 |
Avrupa |
FR |
2004 |
4 |
71744.28 |
Avrupa |
FR |
2004 |
5 |
811716.9 |
Avrupa |
FR |
2004 |
6 |
158726 |
G.GROUP BY gruplandırma KÜMELERİ kullanma
Aşağıdaki örnekte,GROUPING SETSişleç varsa her sütun için dört gruplandırmaSELECTliste.Operatörü benzersiz her değer için bir satır döndürürRegion,Country,Store,veSalesPersonID sütun.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
284 |
33633.59 |
NULL |
NULL |
NULL |
286 |
246272.4 |
NULL |
NULL |
NULL |
289 |
17691.83 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
NULL |
DE |
NULL |
NULL |
18551.07 |
NULL |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
NULL |
NULL |
NULL |
297597.8 |
H.Bileşik öğelerle gruplandırma KÜMELERİ kullanma
Aşağıdaki örnekte,GROUPING SETSBileşik iki öğe listesi içerir(T.[Group], T.CountryRegionCode)ve(DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)).Bileşik her öğe, bir sütun olarak kabul edilir.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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);
Here is the result set.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
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 |
Avrupa |
DE |
NULL |
NULL |
1196260 |
Avrupa |
FR |
NULL |
NULL |
1834941 |
I.Grupla birden çok gruplandırma KÜMELERİ kullanma
Aşağıdaki örnekte,GROUPING SETSliste yok beş öğe.Sonuç küme aşağıdaki öğeler için bir satır vardır:
Her değer benzersiz birleşimiRegionveCountrysütunlar
Her benzersiz değerStoresütun
Her değer benzersiz birleşimiSalesPersonIDve Regionsütunlar
Her benzersiz değerSalesPersonIDsütun
Genel toplam
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
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 ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
Avrupa |
NULL |
NULL |
284 |
33633.59 |
Avrupa |
NULL |
NULL |
286 |
246272.4 |
Avrupa |
NULL |
NULL |
289 |
17691.83 |
Avrupa |
DE |
NULL |
NULL |
18551.07 |
Avrupa |
FR |
NULL |
NULL |
279046.8 |
J.Bir GROUP BY listesinde bir kısmının ROLLUP ile gruplandırma KÜMELERİ kullanma
Aşağıdaki örnekte,GROUPING SETSliste grupları için sütunlar içerirT.[Group]veT.CountryRegionCode veROLLUPsütunS.NameveH.SalesPersonID.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
297597.8 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
NULL |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
NULL |
NULL |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
NULL |
Çok yönlü spor mal şirket |
289 |
17691.83 |
NULL |
DE |
NULL |
NULL |
18551.07 |
NULL |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
NULL |
NULL |
NULL |
297597.8 |
K.Bir GROUP BY listesinde bir kısmının küp ile gruplandırma KÜMELERİ kullanma
Aşağıdaki örnekte,GROUPING SETSliste grupları için sütunlar içerirT.[Group]veT.CountryRegionCode veCUBEsütunS.NameveH.SalesPersonID.
USE AdventureWorks;
GO
SELECT 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.CustomerID
WHERE 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;
Here is the result set.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
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 ve Alıştırmayı Outfitters |
NULL |
279046.8 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
284 |
32774.36 |
NULL |
NULL |
SPA ve Alıştırmayı Outfitters |
286 |
246272.4 |
NULL |
NULL |
Çok yönlü spor mal şirket |
NULL |
18551.07 |
NULL |
NULL |
Çok yönlü spor mal şirket |
284 |
859.232 |
NULL |
NULL |
Çok yönlü spor mal şirket |
289 |
17691.83 |
NULL |
DE |
NULL |
NULL |
18551.07 |
NULL |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
NULL |
NULL |
NULL |
297597.8 |
See Also