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 |
---|---|
|
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 |
---|---|
|
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 |
---|---|
|
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 |
See Also