Aracılığıyla paylaş


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

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

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

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

()

ACUBEkonum ve saat boyutları aynı düzeylerinden işlemi verir aşağıdaki grupları.

Operation:

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