Udostępnij za pośrednictwem


Za pomocą GROUP BY ROLLUP, moduł i grupowanie zestawów

Operatory ROLLUP, moduł i zestawy grupowanie są rozszerzenia klauzula GROUP BY.Operatory ROLLUP, moduł lub zestawy grupowanie może wygenerować tego samego zestaw wyników jako podczas korzystania z UNION ALL do łączenia jednego grupowanie kwerendy, ale przy użyciu jednego z podmiotów gospodarczych GROUP BY jest zazwyczaj bardziej efektywne.

Operator USTAWIA grupowanie może wygenerować ten sam zestaw wyników, jak wygenerowany przy użyciu prostego operator GROUP BY, ROLLUP lub moduł.Podczas grupowanie, generowane przy użyciu pełnego ROLLUP lub moduł operator nie są wymagane, można użyć grupowanie zestawów, do określenia grup, które mają.Lista zestawów grupowanie może zawierać zduplikowanych grupowanie; i użyto zestawów grupowanie ROLLUP i moduł może wygenerować zduplikowane grupowanie.Zduplikowane grupy są zachowywane jako byłyby za pomocą UNION ALL.

Uwaga

moduł, ROLLUP i zestawy grupowanie nie obsługują funkcja CHECKSUM_AGG.

Projekt wstępny i są połączone elementy

Wiele kolumn, które znajdują się w nawiasach wewnętrznych wLista zestawów grupowanie są traktowane jako jeden zestaw. Na przykład w klauzula GROUP BY GROUPING SETS ((Colum1, Column2), Column3, Column4), Column1 i Column2 są traktowane jako jedna kolumna. Na przykład jak używać zestawów grupowanie z elementów projektu wstępnego Zobacz przykład H w dalszej części tego tematu.

Jeśli lista USTAWIA grupowanie zawiera wiele zestawów w nawiasach wewnętrznych, oddzielając je średnikami, dane wyjściowe z zestawów są tak łączone.Zestaw wyników jest iloczyn krzyżowy lub kartezjański zestawów grupowanie.Na przykład jak używać GROUP BY z operacjami ROLLUP są połączone Zobacz przykład D w dalszej części tego tematu.

ROLLUP i porównanie z wymiary OLAP moduł

Kwerendy korzystające z operatorów ROLLUP i moduł niektóre z tych samych zestawów wyników generowania i wykonywania niektórych obliczeń aplikacji OLAP.operator moduł generuje zestaw wyników, które mogą być używane dla raportów tabulation między domenami.Operacja ROLLUP można obliczyć odpowiednik OLAP wymiaru lub hierarchii.

Na przykład, biorąc pod uwagę wymiarze czasowym obejmującym poziomy lub atrybutów rok, miesiąc i dzień; następujące ROLLUP Operacja generuje następujące grupy.

Operacja

Grupy

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

year, month, day

year, month

year

()

Biorąc pod uwagę wymiar lokalizacji, z poziomu region i Miasto połączenie wymiaru czas poziomy rok, miesiąc i dzień, poniżej ROLLUP Operacja wyświetla następujące grupy.

Operacja

Grupy

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 działanie tego samego poziomu z wymiarów lokalizację i czas wyświetla następujące grupy.

Operacja

Grupowanie

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

()

Wartość NULL w zestawy wyników

W zestawach wyników, które zostały wygenerowane przez operatorów GROUP BY wartość NULL ma następujące zastosowania:

  • Jeśli kolumna grupowanie zawiera wartość NULL, wszystkie wartości null są traktowane jako równe i są one wprowadzane do jednej grupowanie wartości NULL.

  • Gdy kolumna są łączone w wierszu, wartości kolumna jest wyświetlany jako wartość NULL.

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.

Sklep

RokSprzed

SalesMonth

Count

Nieznany

Nieznany

Nieznany

1

Nieznany

Nieznany

Styczeń

1

Nieznany

Nieznany

ALL

2

Nieznany

2002

Nieznany

1

Nieznany

2002

ALL

1

Nieznany

ALL

ALL

3

Aktywne cykliczne

Nieznany

Nieznany

1

Aktywne cykliczne

Nieznany

Styczeń

2

Aktywne cykliczne

Nieznany

ALL

3

Aktywne cykliczne

2002

Nieznany

1

Aktywne cykliczne

2002

ALL

1

Aktywne cykliczne

2003

Nieznany

1

Aktywne cykliczne

2003

Febuary

1

Aktywne cykliczne

2003

ALL

2

Aktywne cykliczne

ALL

ALL

6

Magazyn Bike górskie

Nieznany

Nieznany

1

Magazyn Bike górskie

Nieznany

ALL

1

Magazyn Bike górskie

2002

Nieznany

1

Magazyn Bike górskie

2002

Styczeń

1

Magazyn Bike górskie

2002

ALL

2

Magazyn Bike górskie

2003

Febuary

1

Magazyn Bike górskie

2003

Styczeń

1

Magazyn Bike górskie

2003

Marzec

1

Magazyn Bike górskie

2003

ALL

3

Magazyn Bike górskie

ALL

ALL

6

ALL

ALL

ALL

15

PRZYKŁADY

W tej sekcji w przykładach używana suma agregacja działać tak, aby zestaw wyników można porównać.Aby obliczać różne podsumowania można również inne funkcje agregujące.

A.Za pomocą zwykłą GROUP BY

W poniższym przykładzie proste GROUP BY Zwraca zestaw porównywania zestawów wyników z przykładów B, za pomocą k wyników Użyj tych przykładów GROUP BY operatory o tym samym SELECT Instrukcja.

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

Europa

DE

Uniwersalny sportowych firmy towarów

284

859.232

Europa

DE

Uniwersalny sportowych firmy towarów

289

17691.83

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

B.Za pomocą GROUP BY ROLLUP

W poniższym przykładzie ROLLUP operator zwraca zestaw wyników, która zawiera następujące grupy:

  • Region, Country, Store, a SalesPersonID

  • Region, Country, and Store

  • Region, a Country

  • Region

  • Suma końcowa

Liczba grup, który jest generowany przez ROLLUP jest taka sama jak liczba kolumn w ROLLUP listy i sumy całkowite grupowanie. Liczba wierszy w grupowanie zależy od liczby unikatowe kombinacje wartości w kolumnach grupowanie.

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

Europa

DE

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

Europa

DE

Uniwersalny sportowych firmy towarów

284

859.232

Europa

DE

Uniwersalny sportowych firmy towarów

289

17691.83

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

C.Za pomocą GROUP BY ROLLUP z kolumna odwrócona kolejność

W poniższym przykładzie ROLLUP operator zwraca zestaw wyników, która zawiera następujące grupy:

  • SalesPersonID, Store, Country, a Region

  • SalesPersonID, Store, and Country

  • SalesPersonID, a Store

  • SalesPersonID

  • Suma końcowa

W kolumnach ROLLUP listy są takie same, jak w przykładzie B, ale są one w odwrotnej kolejności. Kolumny są rzutowane od prawej do lewej; z tego powodu, wpływa na kolejność grup.Liczba wierszy zestaw wyników może się zmieniać w zależności od kolejności kolumn.

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

DE

Uniwersalny sportowych firmy towarów

284

859.232

Europa

DE

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

WARTOŚCI NULL

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

289

17691.83

WARTOŚCI NULL

DE

Uniwersalny sportowych firmy towarów

289

17691.83

Europa

DE

Uniwersalny sportowych firmy towarów

289

17691.83

D.Za pomocą GROUP BY są połączone operacjami ROLLUP

W poniższym przykładzie iloczyn krzyżowy dwóch ROLLUP operacje są zwracane.

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.

Region

Country

Rok

Miesiąc

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

3031201

WARTOŚCI NULL

WARTOŚCI NULL

2004

WARTOŚCI NULL

3031201

WARTOŚCI NULL

WARTOŚCI NULL

2004

1

208553.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

2

819466.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

3

298579.1

WARTOŚCI NULL

WARTOŚCI NULL

2004

4

294427.7

WARTOŚCI NULL

WARTOŚCI NULL

2004

5

1070679

WARTOŚCI NULL

WARTOŚCI NULL

2004

6

339495.1

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

3031201

Europa

WARTOŚCI NULL

2004

WARTOŚCI NULL

3031201

Europa

WARTOŚCI NULL

2004

1

208553.6

Europa

WARTOŚCI NULL

2004

2

819466.6

Europa

WARTOŚCI NULL

2004

3

298579.1

Europa

WARTOŚCI NULL

2004

4

294427.7

Europa

WARTOŚCI NULL

2004

5

1070679

Europa

WARTOŚCI NULL

2004

6

339495.1

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

1196260

Europa

DE

2004

WARTOŚCI NULL

1196260

Europa

DE

2004

1

155066.2

Europa

DE

2004

2

197801.8

Europa

DE

2004

3

180977.7

Europa

DE

2004

4

222683.4

Europa

DE

2004

5

258962

Europa

DE

2004

6

180769.1

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

1834941

Europa

FR

2004

WARTOŚCI NULL

1834941

Europa

FR

2004

1

53487.37

Europa

FR

2004

2

621664.9

Europa

FR

2004

3

117601.4

Europa

FR

2004

4

71744.28

Europa

FR

2004

5

811716.9

Europa

FR

2004

6

158726

E.Za pomocą GROUP BY moduł

W poniższym przykładzie CUBE operator zwraca zestaw wyników zawierający jeden grupowanie dla wszystkich możliwych kombinacji kolumn CUBE Lista i sumy całkowite zgrupowania.

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

289

17691.83

WARTOŚCI NULL

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

DE

WARTOŚCI NULL

284

859.232

WARTOŚCI NULL

DE

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

DE

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

DE

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

DE

Uniwersalny sportowych firmy towarów

289

17691.83

WARTOŚCI NULL

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

FR

WARTOŚCI NULL

284

32774.36

WARTOŚCI NULL

FR

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

FR

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

Europa

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

Europa

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

Europa

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

Europa

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

Europa

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

Europa

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

Europa

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

Europa

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

284

859.232

Europa

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

289

17691.83

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

Europa

DE

WARTOŚCI NULL

284

859.232

Europa

DE

WARTOŚCI NULL

289

17691.83

Europa

DE

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

Europa

DE

Uniwersalny sportowych firmy towarów

284

859.232

Europa

DE

Uniwersalny sportowych firmy towarów

289

17691.83

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

Europa

FR

WARTOŚCI NULL

284

32774.36

Europa

FR

WARTOŚCI NULL

286

246272.4

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

Europa

FR

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

F.Za pomocą moduł z elementami projektu wstępnego

W poniższym przykładzie CUBE operator zwraca zestaw wyników zawierający jeden grupowanie dla wszystkich możliwych kombinacji kolumn CUBE Lista i sumy całkowite zgrupowania.

Operator przetwarza zgrupowanych kolumn (T.[Group], T.CountryRegionCode) i (DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)) każdej jako pojedynczą kolumna.

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.

Region

Country

Rok

Miesiąc

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

3031201

WARTOŚCI NULL

WARTOŚCI NULL

2004

1

208553.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

2

819466.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

3

298579.1

WARTOŚCI NULL

WARTOŚCI NULL

2004

4

294427.7

WARTOŚCI NULL

WARTOŚCI NULL

2004

5

1070679

WARTOŚCI NULL

WARTOŚCI NULL

2004

6

339495.1

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

1196260

Europa

DE

2004

1

155066.2

Europa

DE

2004

2

197801.8

Europa

DE

2004

3

180977.7

Europa

DE

2004

4

222683.4

Europa

DE

2004

5

258962

Europa

DE

2004

6

180769.1

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

1834941

Europa

FR

2004

1

53487.37

Europa

FR

2004

2

621664.9

Europa

FR

2004

3

117601.4

Europa

FR

2004

4

71744.28

Europa

FR

2004

5

811716.9

Europa

FR

2004

6

158726

G.Korzystanie z ZESTAWAMI grupowanie GROUP BY

W poniższym przykładzie GROUPING SETS podmiot gospodarczy ma cztery grupy, jeden dla każdej kolumna SELECT Lista. Operator zwraca jeden wiersz dla każdej wartości unikatowe w Region, Country, Store, i SalesPersonID kolumny.

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

H.Korzystanie z zestawów grupowanie z elementami projektu wstępnego

W poniższym przykładzie GROUPING SETS Lista zawiera dwa elementy projektu wstępnego, (T.[Group], T.CountryRegionCode) i (DATEPART(yyyy,OrderDate), DATEPART(mm,OrderDate)). Każdy element złożony jest traktowana jako jedna kolumna.

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.

Region

Country

Rok

Miesiąc

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

2004

1

208553.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

2

819466.6

WARTOŚCI NULL

WARTOŚCI NULL

2004

3

298579.1

WARTOŚCI NULL

WARTOŚCI NULL

2004

4

294427.7

WARTOŚCI NULL

WARTOŚCI NULL

2004

5

1070679

WARTOŚCI NULL

WARTOŚCI NULL

2004

6

339495.1

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

1196260

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

1834941

I.Przy użyciu GROUP BY z wielu zestawów grupowanie

W poniższym przykładzie GROUPING SETS Lista zawiera pięć elementów. Zestaw wyników zawiera jeden wiersz dla następujących elementów:

  • Każda unikatowa kombinacja wartości Region i Country kolumny

  • Każda wartość unikatowa w Store kolumna

  • Każda unikatowa kombinacja wartości SalesPersonID i Region kolumny

  • Każda wartość unikatowa w SalesPersonID kolumna

  • Suma końcowa

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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

Europa

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

Europa

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

Europa

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

Europa

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

Europa

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

J.Korzystanie z zestawów grupowanie z pakietem ZBIORCZYM część na liście GROUP BY

W poniższym przykładzie GROUPING SETS Lista zawiera grupy dla kolumn T.[Group] i T.CountryRegionCode i ROLLUP kolumn S.Name i H.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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

289

17691.83

WARTOŚCI NULL

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

Wiersze mogą być tak szerokie, czasami dany operator nie może przetworzyć w wierszu.Korzystanie z zestawów grupowanie z KOSTKĄ część na liście GROUP BY

W poniższym przykładzie GROUPING SETS Lista zawiera grupy dla kolumn T.[Group] i T.CountryRegionCode i CUBE kolumn S.Name i H.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.

Region

Country

Sklep

SalesPersonID

Sprzedaż razem

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

284

33633.59

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

289

17691.83

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

WARTOŚCI NULL

279046.8

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

284

32774.36

WARTOŚCI NULL

WARTOŚCI NULL

Uzdrowisko i Outfitters ćwiczenie

286

246272.4

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

284

859.232

WARTOŚCI NULL

WARTOŚCI NULL

Uniwersalny sportowych firmy towarów

289

17691.83

WARTOŚCI NULL

DE

WARTOŚCI NULL

WARTOŚCI NULL

18551.07

WARTOŚCI NULL

FR

WARTOŚCI NULL

WARTOŚCI NULL

279046.8

Europa

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

297597.8