GROUP BY'ı ROLLUP, CUBE ve GROUPING SETS ile Kullanma
ROLLUP, CUBE ve GROUPING SETS işleçleri, GROUP BY yan cümlesinin uzantılarıdır.ROLLUP, CUBE ve GROUPING SETS işleçleri, tekli gruplama sorgularını birleştirmek için UNION ALL bilgisini kullandığınızda ortaya çıkan sonuç kümesinin aynısını oluşturabilir ancak, GROUP BY işleçlerinden birini kullanmak genelde daha etkilidir.
GROUPING SETS işleci, tek bir GROUP BY, ROLLUP ya da CUBE işleci kullanılarak oluşturulan sonuç kümesinin aynısını oluşturabilir.ROLLUP veya CUBE işleci kullanılarak oluşturulan tüm gruplamalar gerekli olmadığında, sadece istediğiniz gruplamaları belirlemek için GROUPING SETS kullanabilirsiniz.GROUPING SETS listesi yinelenen gruplar içerebilir; ve GROUPING SETS, ROLLUP ve CUBE ile kullanıldığında, yinelenen gruplandırmalar oluşturabilir.Yinelenen gruplamalar UNION ALL kullanıyorlarmış gibi korunurlar.
Not
CUBE, ROLLUP ve GROUPING SETS, CHECKSUM_AGG işlevini desteklemez.
Bileşik ve Bitiştirilmiş Öğeler
GROUPING SETS listesinin iç parantezinde olan bir çok sütun tek bir küme olarak değerlendirilir.Örneğin, yan cümlede GROUP BY GROUPING SETS ((Colum1, Column2), Column3, Column4), Column1 ve Column2 tek bir sütun olarak değerlendirilir.GROUPING SETS bilgisinin bileşik öğelerle nasıl kullanıldığıyla ilgili bir örnek için, bu konunun ilerleyen bölümlerindeki H örneğine bakın.
GROUPING SETS listesi, parantez içinde virgülle ayrılmış olan birden çok küme içerdiğinde, kümelerin çıktıları birleştirilmiştir.Sonuç kümesi, gruplama kümelerinin vektörel çarpımı veya Kartezyen çarpımıdır.GROUP BY özelliğinin bitiştirilmiş ROLLUP işleçleriyle nasıl kullanıldığıyla ilgili bir örnek için, bu konunun ilerleyen bölümlerindeki D örneğine bakın.
ROLLUP ve CUBE Seçeneklerinin OLAP Boyutları ile Karşılaştırılması
ROLLUP ve CUBE işleçlerini kullanan sorgular, OLAP uygulamalarındaki bazı sonuç kümelerinin aynılarını oluşturabilirler ve bazı hesaplamaların aynılarını gerçekleştirebilirler.CUBE işleci, çapraz tablolama raporları için kullanılabilecek olan bir sonuç kümesi oluşturur.ROLLUP işleci, bir OLAP boyutunun ya da hiyerarşisinin eş değerinde hesaplayabilir.
Örneğin, bir zaman boyutu düzeylerle ya da yıl, ay ve gün öznitelikleriyle verildiğinde; aşağıdaki ROLLUP işlemi aşağıdaki gruplamaları oluşturur.
İşlem |
Gruplandırmalar |
---|---|
|
year, month, day year, month year () |
Bir konum boyutu, yıl, ay ve gün zaman boyutu düzeyleriyle bitiştirilmiş şehir ve bölge düzeyleriyle verildiğinde; aşağıdaki ROLLUP işlemi aşağıdaki gruplamaları çıktı olarak verir.
İşlem |
Gruplandırmalar |
---|---|
|
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 () |
A CUBE yer ve saat boyutlarındaki aynı düzeylerin işlemi aşağıdaki gruplandırmaları çıktı olarak verir.
İşlem |
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ümelerinde NULL
GROUP BY işleçleri tarafından oluşturulan, sonuç kümelerinin içindeki NULL değerinin kullanımları aşağıdadır:
Gruplandırma sütunu NULL değeri içeriyorsa, tüm boş değerler eşit olarak kabul edilir ve bir NULL grup içerisine konur.
Sütun satır içinde toplandığında, sütunun değeri NULL olarak gösterilir.
Aşağıdaki örnek NULL değerinin iki kullanımı göstermek için GROUPING işlevini kullanır.UNKNOWN öğesi sütunun içinde boş değerlerin gruplandığı satırlardaki NULL öğesini değiştirir.ALL öğesi NULL öğesinin toplama bir sütunun eklendiğini gösterdiği bir sütunda NULL öğesini değiştirir.
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);
Sonuç kümesi buradadır.
Mağaza |
SalesYear |
SalesMonth |
Say |
---|---|---|---|
Bilinmiyor |
Bilinmiyor |
Bilinmiyor |
1 |
Bilinmiyor |
Bilinmiyor |
Ocak |
1 |
Bilinmiyor |
Bilinmiyor |
ALL |
2 |
Bilinmiyor |
2002 |
Bilinmiyor |
1 |
Bilinmiyor |
2002 |
ALL |
1 |
Bilinmiyor |
ALL |
ALL |
3 |
Aktif Olarak Bisiklete Binme |
Bilinmiyor |
Bilinmiyor |
1 |
Aktif Olarak Bisiklete Binme |
Bilinmiyor |
Ocak |
2 |
Aktif Olarak Bisiklete Binme |
Bilinmiyor |
ALL |
3 |
Aktif Olarak Bisiklete Binme |
2002 |
Bilinmiyor |
1 |
Aktif Olarak Bisiklete Binme |
2002 |
ALL |
1 |
Aktif Olarak Bisiklete Binme |
2003 |
Bilinmiyor |
1 |
Aktif Olarak Bisiklete Binme |
2003 |
Şubat |
1 |
Aktif Olarak Bisiklete Binme |
2003 |
ALL |
2 |
Aktif Olarak Bisiklete Binme |
ALL |
ALL |
6 |
Dağ bisikleti Mağazası |
Bilinmiyor |
Bilinmiyor |
1 |
Dağ Bisikleti Mağazası |
Bilinmiyor |
ALL |
1 |
Dağ Bisikleti Mağazası |
2002 |
Bilinmiyor |
1 |
Dağ Bisikleti Mağazası |
2002 |
Ocak |
1 |
Dağ Bisikleti Mağazası |
2002 |
ALL |
2 |
Dağ Bisikleti Mağazası |
2003 |
Şubat |
1 |
Dağ Bisikleti Mağazası |
2003 |
Ocak |
1 |
Dağ Bisikleti Mağazası |
2003 |
Mart |
1 |
Dağ Bisikleti Mağazası |
2003 |
ALL |
3 |
Dağ Bisikleti Mağazası |
ALL |
ALL |
6 |
ALL |
ALL |
ALL |
15 |
ÖRNEKLER
Bu bölümdeki örnekler, sonuç kümelerinin karlılaştırılabilmesi için SUM adlı toplama işlevini kullanır.Diğer toplama işlevleri, değişik özetleri hesaplamak için de kullanılabilir.
A.Basit bir GROUP BY kullanarak
Aşağıdaki örnekte, basit bir GROUP BY B ile K arasındaki örneklerin sonuç kümelerini karşılaştırmak için sonuç kümesine döndürür.Bu örnekler aynı SELECT deyimi ile GROUP BY operatörlerini kullanır.
USE AdventureWorks2008R2;
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.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 290, 288)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
284 |
859.232 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
289 |
17691.83 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
284 |
32774.36 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
286 |
246272.4 |
B.GROUP BY ROLLUP kullanarak
Aşağıdaki örnekte, ROLLUP işleci ,aşağıdaki gruplandırmaları içeren sonuç kümesi döndürür.:
Region, Country, Store, ve SalesPersonID
Region, Country, ve Store
Region, ve Country
Region
genel toplam
ROLLUP tarafından oluşturulan gruplandırma sayısı, ROLLUP listesi ile bir genel toplam gruplandırma içindeki sütun sayısıyla aynıdır.Gruplandırma içindeki satır sayısı, gruplama sütunlarındaki değerlerin benzersiz kombinasyonlarının sayısıyla belirlenir.
USE AdventureWorks2008R2;
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.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 290, 288)
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;
Sonuç kümesi buradadır.
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 Çeşitli Spor Ürünleri Şirketi |
NULL |
18551.07 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
284 |
859.232 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
289 |
17691.83 |
Avrupa |
FR |
NULL |
NULL |
279046.8 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
NULL |
279046.8 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
284 |
32774.36 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
286 |
246272.4 |
C.GROUP BY ROLLUP seçeneğini ters sütun sırası ile kullanarak
Aşağıdaki örnekte, ROLLUP işleci ,aşağıdaki gruplandırmaları içeren sonuç kümesi döndürür.:
SalesPersonID, Store, Country, ve Region
SalesPersonID, Store, ve Country
SalesPersonID, ve Store
SalesPersonID
genel toplam
ROLLUP listesinin içindeki sütunlar örnek B'dekilerle aynıdır, ancak ters sıradadır.Sütunlar, sağdan sola toplanmıştır; bu nedenle, sıralama gruplamaları etkiler.Sonuç kümesindeki satır sayısı sütun sırasıyla farklılaşabilir.
USE AdventureWorks2008R2;
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.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 290, 288)
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];
Sonuç kümesi buradadır.
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 Egzersiz Malzemecileri |
284 |
32774.36 |
NULL |
FR |
Spa ve Egzersiz Malzemecileri |
284 |
32774.36 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
284 |
32774.36 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
284 |
859.232 |
NULL |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
284 |
859.232 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
284 |
859.232 |
NULL |
NULL |
NULL |
286 |
246272.4 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
286 |
246272.4 |
NULL |
FR |
Spa ve Egzersiz Malzemecileri |
286 |
246272.4 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
286 |
246272.4 |
NULL |
NULL |
NULL |
289 |
17691.83 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
289 |
17691.83 |
NULL |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
289 |
17691.83 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
289 |
17691.83 |
D.GROUP BY seçeneğini bitiştirilmiş ROLLUP işlemleriyle kullanma
Aşağıdaki örnekte, iki ROLLUP işleminin vektörel çarpımı döndürülür.
USE AdventureWorks2008R2;
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.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND DATEPART(yyyy,OrderDate) = '2006'
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);
Sonuç kümesi buradadır.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
966221.9606 |
NULL |
NULL |
2006 |
NULL |
966221.9606 |
NULL |
NULL |
2006 |
7 |
109936.0248 |
NULL |
NULL |
2006 |
8 |
296651.4808 |
NULL |
NULL |
2006 |
9 |
184477.7563 |
NULL |
NULL |
2006 |
10 |
62792.5455 |
NULL |
NULL |
2006 |
11 |
213238.0125 |
NULL |
NULL |
2006 |
12 |
99126.1407 |
Avrupa |
NULL |
NULL |
NULL |
966221.9606 |
Avrupa |
NULL |
2006 |
NULL |
966221.9606 |
Avrupa |
NULL |
2006 |
7 |
109936.0248 |
Avrupa |
NULL |
2006 |
8 |
296651.4808 |
Avrupa |
NULL |
2006 |
9 |
184477.7563 |
Avrupa |
NULL |
2006 |
10 |
62792.5455 |
Avrupa |
NULL |
2006 |
11 |
213238.0125 |
Avrupa |
NULL |
2006 |
12 |
99126.1407 |
Avrupa |
FR |
NULL |
NULL |
966221.9606 |
Avrupa |
FR |
2006 |
NULL |
966221.9606 |
Avrupa |
FR |
2006 |
7 |
109936.0248 |
Avrupa |
FR |
2006 |
8 |
296651.4808 |
Avrupa |
FR |
2006 |
9 |
184477.7563 |
Avrupa |
FR |
2006 |
10 |
62792.5455 |
Avrupa |
FR |
2006 |
11 |
213238.0125 |
Avrupa |
FR |
2006 |
12 |
99126.1407 |
E.GROUP BY CUBE kullanarak
Aşağıdaki örnekte, CUBE işleci, CUBE listesi içindeki tüm olası sütun kombinasyonları için bir gruplandırmaya ve bir genel toplam gruplandırmaya sahip olan sonuç kümesi döndürür.
USE AdventureWorks2008R2;
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 AS C
INNER JOIN Sales.Store AS S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 288, 290)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
254013.6014 |
NULL |
NULL |
NULL |
287 |
28461.1854 |
NULL |
NULL |
NULL |
288 |
17073.0655 |
NULL |
NULL |
NULL |
290 |
208479.3505 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
NULL |
DE |
NULL |
NULL |
17802.6999 |
NULL |
DE |
NULL |
287 |
729.6344 |
NULL |
DE |
NULL |
288 |
17073.0655 |
NULL |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
NULL |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
NULL |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
NULL |
FR |
NULL |
NULL |
236210.9015 |
NULL |
FR |
NULL |
287 |
27731.551 |
NULL |
FR |
NULL |
290 |
208479.3505 |
NULL |
FR |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
FR |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
NULL |
FR |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
Avrupa |
NULL |
NULL |
NULL |
254013.6014 |
Avrupa |
NULL |
NULL |
287 |
28461.1854 |
Avrupa |
NULL |
NULL |
288 |
17073.0655 |
Avrupa |
NULL |
NULL |
290 |
208479.3505 |
Avrupa |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
Avrupa |
NULL |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
Avrupa |
NULL |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
Avrupa |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
Avrupa |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
Avrupa |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
Avrupa |
DE |
NULL |
NULL |
17802.6999 |
Avrupa |
DE |
NULL |
287 |
729.6344 |
Avrupa |
DE |
NULL |
288 |
17073.0655 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
Avrupa |
DE |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
Avrupa |
FR |
NULL |
NULL |
236210.9015 |
Avrupa |
FR |
NULL |
287 |
27731.551 |
Avrupa |
FR |
NULL |
290 |
208479.3505 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
Avrupa |
FR |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
F.CUBE seçeneğini bileşik öğelerle birlikte kullanarak
Aşağıdaki örnekte, CUBE işleci, CUBE listesi çindeki tüm olası sütun kombinasyonları için bir gruplandırmaya ve bir genel toplam gruplandırmaya sahip olan bir sonuç kümesi döndürür.
İşleç gruplanmış sütunları işler (T.[Group], T.CountryRegionCode) ve (DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)) her biri tek bir sütun gibi.
USE AdventureWorks2008R2;
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.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND DATEPART(yyyy,OrderDate) = '2006'
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);
Sonuç kümesi buradadır.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
966221.9606 |
NULL |
NULL |
2006 |
7 |
109936.0248 |
NULL |
NULL |
2006 |
8 |
296651.4808 |
NULL |
NULL |
2006 |
9 |
184477.7563 |
NULL |
NULL |
2006 |
10 |
62792.5455 |
NULL |
NULL |
2006 |
11 |
213238.0125 |
NULL |
NULL |
2006 |
12 |
99126.1407 |
Avrupa |
FR |
NULL |
NULL |
966221.9606 |
Avrupa |
FR |
2006 |
7 |
109936.0248 |
Avrupa |
FR |
2006 |
8 |
296651.4808 |
Avrupa |
FR |
2006 |
9 |
184477.7563 |
Avrupa |
FR |
2006 |
10 |
62792.5455 |
Avrupa |
FR |
2006 |
11 |
213238.0125 |
Avrupa |
FR |
2006 |
12 |
99126.1407 |
G.GROUP BY Seçeneğini GROUPING SETS ile kullanarak
Aşağıdaki örnekte, GROUPING SETS işlecinin dört gruplandırması vardır; her sütun için bir tanesi SELECT listesi içindedir.İşleç, Region, Country, Store, ve SalesPersonID sütunları içindeki her bir benzersiz değer için bir satır döndürür.
USE AdventureWorks2008R2;
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 AS S
ON C.StoreID = S.BusinessEntityId
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 288, 290)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
287 |
28461.1854 |
NULL |
NULL |
NULL |
288 |
17073.0655 |
NULL |
NULL |
NULL |
290 |
208479.3505 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
NULL |
DE |
NULL |
NULL |
17802.6999 |
NULL |
FR |
NULL |
NULL |
236210.9015 |
Avrupa |
NULL |
NULL |
NULL |
254013.6014 |
H.GROUPING SETS seçeneğini bileşik öğelerle kullanarak
Aşağıdaki örnekte, GROUPING SETS listesi iki bileşik öğe içerir: (T.[Group], T.CountryRegionCode) ve (DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)).Her bileşik öğenin bir sütun olarak değerlendirilir.
USE AdventureWorks2008R2;
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 AS S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND DATEPART(yyyy,OrderDate) = '2006'
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);
Sonuç kümesi buradadır.
Bölge |
Ülke |
Yıl |
Ay |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
2006 |
7 |
109936.0248 |
NULL |
NULL |
2006 |
8 |
296651.4808 |
NULL |
NULL |
2006 |
9 |
184477.7563 |
NULL |
NULL |
2006 |
10 |
62792.5455 |
NULL |
NULL |
2006 |
11 |
213238.0125 |
NULL |
NULL |
2006 |
12 |
99126.1407 |
Avrupa |
FR |
NULL |
NULL |
966221.9606 |
I.GROUP BY seçeneğini birden çok GROUPING SETS ile kullanarak
Aşağıdaki örnekte, GROUPING SETS listesi beş elemente sahipSonuç kümesinin aşağıdaki öğeler için bir satırı vardır:
Region ve Country sütunları içindeki her benzersiz değer kombinasyonu
Store sütunu içindeki her benzersiz değer
SalesPersonID ve Region sütunları içindeki her benzersiz değer kombinasyonu
SalesPersonID sütunu içindeki her benzersiz değer
Genel Toplam
USE AdventureWorks2008R2;
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 AS S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 288, 290)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
254013.6014 |
NULL |
NULL |
NULL |
287 |
28461.1854 |
NULL |
NULL |
NULL |
288 |
17073.0655 |
NULL |
NULL |
NULL |
290 |
208479.3505 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
Avrupa |
NULL |
NULL |
287 |
28461.1854 |
Avrupa |
NULL |
NULL |
288 |
17073.0655 |
Avrupa |
NULL |
NULL |
290 |
208479.3505 |
Avrupa |
DE |
NULL |
NULL |
17802.6999 |
Avrupa |
FR |
NULL |
NULL |
236210.9015 |
J.GROUPING SETS seçeneğini GROUP BY listesinin parçasının ROLLUP seçeneği ile beraber kullanarak
Aşağıdaki örnekte, GROUPING SETS listesi, T.[Group] ve T.CountryRegionCode sütunları için gruplamalar ve S.Name ve H.SalesPersonID sütunları için ROLLUP içerir.
USE AdventureWorks2008R2;
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 AS S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 288, 290)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
254013.6014 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
NULL |
DE |
NULL |
NULL |
17802.6999 |
NULL |
FR |
NULL |
NULL |
236210.9015 |
Avrupa |
NULL |
NULL |
NULL |
254013.6014 |
K.GROUPING SETS seçeneğini GROUP BY listesinin parçasının CUBE seçeneği ile beraber kullanarak
Aşağıdaki örnekte, GROUPING SETS listesi, T.[Group] ve T.CountryRegionCode sütunları için gruplamalar ve S.Name ve H.SalesPersonID sütunları için CUBE içerir.
USE AdventureWorks2008R2;
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 AS S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory AS T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader AS H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN(N'DE', N'FR')
AND H.SalesPersonID IN(287, 288, 290)
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;
Sonuç kümesi buradadır.
Bölge |
Ülke |
Mağaza |
SalesPersonID |
Toplam Satışlar |
---|---|---|---|---|
NULL |
NULL |
NULL |
NULL |
254013.6014 |
NULL |
NULL |
NULL |
287 |
28461.1854 |
NULL |
NULL |
NULL |
288 |
17073.0655 |
NULL |
NULL |
NULL |
290 |
208479.3505 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
NULL |
236210.9015 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
287 |
27731.551 |
NULL |
NULL |
Spa ve Egzersiz Malzemecileri |
290 |
208479.3505 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
NULL |
17802.6999 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
287 |
729.6344 |
NULL |
NULL |
Çok Çeşitli Spor Ürünleri Şirketi |
288 |
17073.0655 |
NULL |
DE |
NULL |
NULL |
17802.6999 |
NULL |
FR |
NULL |
NULL |
236210.9015 |
Avrupa |
NULL |
NULL |
NULL |
254013.6014 |