Aracılığıyla paylaş


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

ROLLUP (DATEPART(yyyy,OrderDate)
    ,DATEPART(mm,OrderDate)
    ,DATEPART(dd,OrderDate)) 

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

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

()

A CUBE yer ve saat boyutlarındaki aynı düzeylerin işlemi aşağıdaki gruplandırmaları çıktı olarak verir.

İşlem

Gruplandırma

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, 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