GROUPING_ID SQL function
1. Usage of GROUPING_ID with ROLLUP to show total freight country and city wise.
SQL Server Query 1
SELECT
c.Country,
c.City,
SUM(o.Freight) AS TotalFreight,
GROUPING(c.Country) AS GroupingCountry,
GROUPING(c.City) AS GroupingCity,
GROUPING_ID(c.Country, c.City) AS GroupingID
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP (c.Country, c.City)
ORDER BY c.Country, c.City;
Create SQL query with SqlQueryBuilder 1
.Select()
.Columns("c.Country", "c.City")
.Column(new SUM(new Column("o.Freight")), "TotalFreight")
.Column(new GROUPING(new Column("c.Country")), "GroupingCountry")
.Column(new GROUPING(new Column("c.City")), "GroupingCity")
.Column(new GROUPING_ID(new Column("c.Country"), new Column("c.City")), "GroupingID")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "o")
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.GroupBy(new GroupBy(new Column("c.Country"), new Column("c.City")).WithRollUp())
.OrderBy(new OrderBy()
.SetColumnAscending("c.Country")
.SetColumnAscending("c.City"))
.Build();
Query build by SqlQueryBuilder 1
SELECT c.Country,
c.City,
SUM(o.Freight) AS TotalFreight,
GROUPING(c.Country) AS GroupingCountry,
GROUPING(c.City) AS GroupingCity,
GROUPING_ID(c.Country, c.City) AS GroupingID
FROM Customers AS c
INNER JOIN
Orders AS o
ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP(c.Country, c.City)
ORDER BY c.Country ASC, c.City ASC;
Parameters (If used)
Query Results 1:
|
Country |
City |
TotalFreight |
GroupingCountry |
GroupingCity |
GroupingID |
1 |
|
|
64942.6900
|
1
|
1
|
3
|
2 |
Argentina
|
|
598.5800
|
0
|
1
|
1
|
3 |
Argentina
|
Buenos Aires
|
598.5800
|
0
|
0
|
0
|
4 |
Austria
|
|
7391.5000
|
0
|
1
|
1
|
5 |
Austria
|
Graz
|
6205.3900
|
0
|
0
|
0
|
6 |
Austria
|
Salzburg
|
1186.1100
|
0
|
0
|
0
|
7 |
Belgium
|
|
1280.1400
|
0
|
1
|
1
|
8 |
Belgium
|
Bruxelles
|
458.9100
|
0
|
0
|
0
|
9 |
Belgium
|
Charleroi
|
821.2300
|
0
|
0
|
0
|
10 |
Brazil
|
|
4880.1900
|
0
|
1
|
1
|
11 |
Brazil
|
Campinas
|
322.3800
|
0
|
0
|
0
|
12 |
Brazil
|
Resende
|
194.7100
|
0
|
0
|
0
|
13 |
Brazil
|
Rio de Janeiro
|
1685.2700
|
0
|
0
|
0
|
14 |
Brazil
|
Sao Paulo
|
2677.8300
|
0
|
0
|
0
|
15 |
Canada
|
|
2198.0900
|
0
|
1
|
1
|
16 |
Canada
|
Montréal
|
1394.2200
|
0
|
0
|
0
|
17 |
Canada
|
Tsawassen
|
793.9500
|
0
|
0
|
0
|
18 |
Canada
|
Vancouver
|
9.9200
|
0
|
0
|
0
|
19 |
Denmark
|
|
1396.1900
|
0
|
1
|
1
|
20 |
Denmark
|
Århus
|
947.3400
|
0
|
0
|
0
|
21 |
Denmark
|
Kobenhavn
|
448.8500
|
0
|
0
|
0
|
22 |
Finland
|
|
910.8900
|
0
|
1
|
1
|
23 |
Finland
|
Helsinki
|
88.4100
|
0
|
0
|
0
|
24 |
Finland
|
Oulu
|
822.4800
|
0
|
0
|
0
|
25 |
France
|
|
4237.8400
|
0
|
1
|
1
|
26 |
France
|
Lille
|
637.9400
|
0
|
0
|
0
|
27 |
France
|
Lyon
|
493.2500
|
0
|
0
|
0
|
28 |
France
|
Marseille
|
1357.8700
|
0
|
0
|
0
|
29 |
France
|
Nantes
|
235.1200
|
0
|
0
|
0
|
30 |
France
|
Paris
|
108.2800
|
0
|
0
|
0
|
31 |
France
|
Reims
|
58.4100
|
0
|
0
|
0
|
32 |
France
|
Strasbourg
|
623.6600
|
0
|
0
|
0
|
33 |
France
|
Toulouse
|
635.8200
|
0
|
0
|
0
|
34 |
France
|
Versailles
|
87.4900
|
0
|
0
|
0
|
35 |
Germany
|
|
11283.2800
|
0
|
1
|
1
|
36 |
Germany
|
Aachen
|
306.0400
|
0
|
0
|
0
|
37 |
Germany
|
Berlin
|
225.5800
|
0
|
0
|
0
|
38 |
Germany
|
Brandenburg
|
813.6800
|
0
|
0
|
0
|
39 |
Germany
|
Cunewalde
|
5605.6300
|
0
|
0
|
0
|
40 |
Germany
|
Frankfurt a.M.
|
1017.0300
|
0
|
0
|
0
|
41 |
Germany
|
Köln
|
862.7400
|
0
|
0
|
0
|
42 |
Germany
|
Leipzig
|
322.0400
|
0
|
0
|
0
|
43 |
Germany
|
Mannheim
|
168.2600
|
0
|
0
|
0
|
44 |
Germany
|
München
|
1403.4400
|
0
|
0
|
0
|
45 |
Germany
|
Münster
|
125.9700
|
0
|
0
|
0
|
46 |
Germany
|
Stuttgart
|
432.8700
|
0
|
0
|
0
|
47 |
Ireland
|
|
2755.2400
|
0
|
1
|
1
|
48 |
Ireland
|
Cork
|
2755.2400
|
0
|
0
|
0
|
49 |
Italy
|
|
864.4400
|
0
|
1
|
1
|
50 |
Italy
|
Bergamo
|
469.7500
|
0
|
0
|
0
|
51 |
Italy
|
Reggio Emilia
|
319.5600
|
0
|
0
|
0
|
52 |
Italy
|
Torino
|
75.1300
|
0
|
0
|
0
|
53 |
Mexico
|
|
1122.7800
|
0
|
1
|
1
|
54 |
Mexico
|
México D.F.
|
1122.7800
|
0
|
0
|
0
|
55 |
Norway
|
|
275.5000
|
0
|
1
|
1
|
56 |
Norway
|
Stavern
|
275.5000
|
0
|
0
|
0
|
57 |
Poland
|
|
175.7400
|
0
|
1
|
1
|
58 |
Poland
|
Warszawa
|
175.7400
|
0
|
0
|
0
|
59 |
Portugal
|
|
643.5300
|
0
|
1
|
1
|
60 |
Portugal
|
Lisboa
|
643.5300
|
0
|
0
|
0
|
61 |
Spain
|
|
861.8900
|
0
|
1
|
1
|
62 |
Spain
|
Barcelona
|
37.9800
|
0
|
0
|
0
|
63 |
Spain
|
Madrid
|
255.6400
|
0
|
0
|
0
|
64 |
Spain
|
Sevilla
|
568.2700
|
0
|
0
|
0
|
65 |
Sweden
|
|
3237.6000
|
0
|
1
|
1
|
66 |
Sweden
|
Bräcke
|
1678.0800
|
0
|
0
|
0
|
67 |
Sweden
|
Luleå
|
1559.5200
|
0
|
0
|
0
|
68 |
Switzerland
|
|
1368.5300
|
0
|
1
|
1
|
69 |
Switzerland
|
Bern
|
367.2400
|
0
|
0
|
0
|
70 |
Switzerland
|
Genève
|
1001.2900
|
0
|
0
|
0
|
71 |
UK
|
|
2954.2700
|
0
|
1
|
1
|
72 |
UK
|
Cowes
|
363.6500
|
0
|
0
|
0
|
73 |
UK
|
London
|
2590.6200
|
0
|
0
|
0
|
74 |
USA
|
|
13771.2900
|
0
|
1
|
1
|
75 |
USA
|
Albuquerque
|
2134.2100
|
0
|
0
|
0
|
76 |
USA
|
Anchorage
|
983.5300
|
0
|
0
|
0
|
77 |
USA
|
Boise
|
6683.7000
|
0
|
0
|
0
|
78 |
USA
|
Butte
|
129.9600
|
0
|
0
|
0
|
79 |
USA
|
Elgin
|
207.0800
|
0
|
0
|
0
|
80 |
USA
|
Eugene
|
1087.6100
|
0
|
0
|
0
|
81 |
USA
|
Kirkland
|
70.0100
|
0
|
0
|
0
|
82 |
USA
|
Lander
|
558.6700
|
0
|
0
|
0
|
83 |
USA
|
Portland
|
341.9500
|
0
|
0
|
0
|
84 |
USA
|
San Francisco
|
202.1100
|
0
|
0
|
0
|
85 |
USA
|
Seattle
|
1353.0600
|
0
|
0
|
0
|
86 |
USA
|
Walla Walla
|
19.4000
|
0
|
0
|
0
|
87 |
Venezuela
|
|
2735.1800
|
0
|
1
|
1
|
88 |
Venezuela
|
Barquisimeto
|
734.4100
|
0
|
0
|
0
|
89 |
Venezuela
|
Caracas
|
67.8000
|
0
|
0
|
0
|
90 |
Venezuela
|
I. de Margarita
|
673.8100
|
0
|
0
|
0
|
91 |
Venezuela
|
San Cristóbal
|
1259.1600
|
0
|
0
|
0
|
2. Usage of GROUPING_ID with GROUPING SETS
SQL Server Query 2
SELECT
c.Country,
c.City,
s.CompanyName AS Shipper,
SUM(o.Freight) AS TotalFreight,
GROUPING(c.Country) AS GroupingCountry,
GROUPING(c.City) AS GroupingCity,
GROUPING(s.CompanyName) AS GroupingShipper,
GROUPING_ID(c.Country, c.City, s.CompanyName) AS GroupingID
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
JOIN Shippers s ON o.ShipVia = s.ShipperID
GROUP BY GROUPING SETS (
(c.Country, c.City),
(c.Country, s.CompanyName),
(s.CompanyName),
() -- Grand total
)
ORDER BY c.Country, c.City, s.CompanyName;
Create SQL query with SqlQueryBuilder 2
var (sql2, parameters2) = new SqlQueryBuilder()
.Select()
.Columns("c.Country", "c.City")
.Column("s.CompanyName","Shipper")
.Column(new SUM(new Column("o.Freight")), "TotalFreight")
.Column(new GROUPING(new Column("c.Country")), "CountryGrouping")
.Column(new GROUPING(new Column("c.City")), "CustomerGrouping")
.Column(new GROUPING(new Column("s.CompanyName")), "GroupingShipper")
.Column(new GROUPING_ID(new Column("c.Country"), new Column("c.City"), new Column("s.CompanyName")), "GroupingID")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "o")
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID"))),
new INNERJOIN().TableName("Shippers", "s")
.On(new Column("o.ShipVia").Equale(new Column("s.ShipperID")))
})
.GroupBy(new GroupBy().WithGroupingSets(new List<List<string>>()
{
new List<string> { "c.Country", "c.City" },
new List<string> { "c.Country", "s.CompanyName" },
new List<string> { "s.CompanyName" },
new List<string>()
}))
.OrderBy(new OrderBy()
.SetColumnAscending("c.Country")
.SetColumnAscending("c.City")
.SetColumnAscending("s.CompanyName"))
.Build();
Query build by SqlQueryBuilder 2
SELECT c.Country,
c.City,
s.CompanyName AS Shipper,
SUM(o.Freight) AS TotalFreight,
GROUPING(c.Country) AS CountryGrouping,
GROUPING(c.City) AS CustomerGrouping,
GROUPING(s.CompanyName) AS GroupingShipper,
GROUPING_ID(c.Country, c.City, s.CompanyName) AS GroupingID
FROM Customers AS c
INNER JOIN
Orders AS o
ON c.CustomerID = o.CustomerID
INNER JOIN
Shippers AS s
ON o.ShipVia = s.ShipperID
GROUP BY GROUPING SETS((c.Country, c.City), (c.Country, s.CompanyName), (s.CompanyName), ())
ORDER BY c.Country ASC, c.City ASC, s.CompanyName ASC;
Parameters (If used)
Query Results 2:
|
Country |
City |
Shipper |
TotalFreight |
GroupingCountry |
GroupingCity |
GroupingID |
GroupingShipper |
1 |
|
|
|
64942.6900
|
0
|
0
|
7
|
1
|
2 |
|
|
Federal Shipping
|
20512.5100
|
0
|
0
|
6
|
0
|
3 |
|
|
Speedy Express
|
16185.3300
|
0
|
0
|
6
|
0
|
4 |
|
|
United Package
|
28244.8500
|
0
|
0
|
6
|
0
|
5 |
Argentina
|
|
Federal Shipping
|
55.5400
|
0
|
0
|
2
|
0
|
6 |
Argentina
|
|
Speedy Express
|
131.9700
|
0
|
0
|
2
|
0
|
7 |
Argentina
|
|
United Package
|
411.0700
|
0
|
0
|
2
|
0
|
8 |
Argentina
|
Buenos Aires
|
|
598.5800
|
0
|
0
|
1
|
1
|
9 |
Austria
|
|
Federal Shipping
|
2107.1000
|
0
|
0
|
2
|
0
|
10 |
Austria
|
|
Speedy Express
|
2218.5700
|
0
|
0
|
2
|
0
|
11 |
Austria
|
|
United Package
|
3065.8300
|
0
|
0
|
2
|
0
|
12 |
Austria
|
Graz
|
|
6205.3900
|
0
|
0
|
1
|
1
|
13 |
Austria
|
Salzburg
|
|
1186.1100
|
0
|
0
|
1
|
1
|
14 |
Belgium
|
|
Federal Shipping
|
279.7300
|
0
|
0
|
2
|
0
|
15 |
Belgium
|
|
Speedy Express
|
269.0000
|
0
|
0
|
2
|
0
|
16 |
Belgium
|
|
United Package
|
731.4100
|
0
|
0
|
2
|
0
|
17 |
Belgium
|
Bruxelles
|
|
458.9100
|
0
|
0
|
1
|
1
|
18 |
Belgium
|
Charleroi
|
|
821.2300
|
0
|
0
|
1
|
1
|
19 |
Brazil
|
|
Federal Shipping
|
823.8400
|
0
|
0
|
2
|
0
|
20 |
Brazil
|
|
Speedy Express
|
1542.9200
|
0
|
0
|
2
|
0
|
21 |
Brazil
|
|
United Package
|
2513.4300
|
0
|
0
|
2
|
0
|
22 |
Brazil
|
Campinas
|
|
322.3800
|
0
|
0
|
1
|
1
|
23 |
Brazil
|
Resende
|
|
194.7100
|
0
|
0
|
1
|
1
|
24 |
Brazil
|
Rio de Janeiro
|
|
1685.2700
|
0
|
0
|
1
|
1
|
25 |
Brazil
|
Sao Paulo
|
|
2677.8300
|
0
|
0
|
1
|
1
|
26 |
Canada
|
|
Federal Shipping
|
848.2900
|
0
|
0
|
2
|
0
|
27 |
Canada
|
|
Speedy Express
|
284.1000
|
0
|
0
|
2
|
0
|
28 |
Canada
|
|
United Package
|
1065.7000
|
0
|
0
|
2
|
0
|
29 |
Canada
|
Montréal
|
|
1394.2200
|
0
|
0
|
1
|
1
|
30 |
Canada
|
Tsawassen
|
|
793.9500
|
0
|
0
|
1
|
1
|
31 |
Canada
|
Vancouver
|
|
9.9200
|
0
|
0
|
1
|
1
|
32 |
Denmark
|
|
Federal Shipping
|
390.4400
|
0
|
0
|
2
|
0
|
33 |
Denmark
|
|
Speedy Express
|
400.8400
|
0
|
0
|
2
|
0
|
34 |
Denmark
|
|
United Package
|
604.9100
|
0
|
0
|
2
|
0
|
35 |
Denmark
|
Århus
|
|
947.3400
|
0
|
0
|
1
|
1
|
36 |
Denmark
|
Kobenhavn
|
|
448.8500
|
0
|
0
|
1
|
1
|
37 |
Finland
|
|
Federal Shipping
|
233.3000
|
0
|
0
|
2
|
0
|
38 |
Finland
|
|
Speedy Express
|
278.0100
|
0
|
0
|
2
|
0
|
39 |
Finland
|
|
United Package
|
399.5800
|
0
|
0
|
2
|
0
|
40 |
Finland
|
Helsinki
|
|
88.4100
|
0
|
0
|
1
|
1
|
41 |
Finland
|
Oulu
|
|
822.4800
|
0
|
0
|
1
|
1
|
42 |
France
|
|
Federal Shipping
|
1823.3700
|
0
|
0
|
2
|
0
|
43 |
France
|
|
Speedy Express
|
1149.9800
|
0
|
0
|
2
|
0
|
44 |
France
|
|
United Package
|
1264.4900
|
0
|
0
|
2
|
0
|
45 |
France
|
Lille
|
|
637.9400
|
0
|
0
|
1
|
1
|
46 |
France
|
Lyon
|
|
493.2500
|
0
|
0
|
1
|
1
|
47 |
France
|
Marseille
|
|
1357.8700
|
0
|
0
|
1
|
1
|
48 |
France
|
Nantes
|
|
235.1200
|
0
|
0
|
1
|
1
|
49 |
France
|
Paris
|
|
108.2800
|
0
|
0
|
1
|
1
|
50 |
France
|
Reims
|
|
58.4100
|
0
|
0
|
1
|
1
|
51 |
France
|
Strasbourg
|
|
623.6600
|
0
|
0
|
1
|
1
|
52 |
France
|
Toulouse
|
|
635.8200
|
0
|
0
|
1
|
1
|
53 |
France
|
Versailles
|
|
87.4900
|
0
|
0
|
1
|
1
|
54 |
Germany
|
|
Federal Shipping
|
3646.9900
|
0
|
0
|
2
|
0
|
55 |
Germany
|
|
Speedy Express
|
3671.9600
|
0
|
0
|
2
|
0
|
56 |
Germany
|
|
United Package
|
3964.3300
|
0
|
0
|
2
|
0
|
57 |
Germany
|
Aachen
|
|
306.0400
|
0
|
0
|
1
|
1
|
58 |
Germany
|
Berlin
|
|
225.5800
|
0
|
0
|
1
|
1
|
59 |
Germany
|
Brandenburg
|
|
813.6800
|
0
|
0
|
1
|
1
|
60 |
Germany
|
Cunewalde
|
|
5605.6300
|
0
|
0
|
1
|
1
|
61 |
Germany
|
Frankfurt a.M.
|
|
1017.0300
|
0
|
0
|
1
|
1
|
62 |
Germany
|
Köln
|
|
862.7400
|
0
|
0
|
1
|
1
|
63 |
Germany
|
Leipzig
|
|
322.0400
|
0
|
0
|
1
|
1
|
64 |
Germany
|
Mannheim
|
|
168.2600
|
0
|
0
|
1
|
1
|
65 |
Germany
|
München
|
|
1403.4400
|
0
|
0
|
1
|
1
|
66 |
Germany
|
Münster
|
|
125.9700
|
0
|
0
|
1
|
1
|
67 |
Germany
|
Stuttgart
|
|
432.8700
|
0
|
0
|
1
|
1
|
68 |
Ireland
|
|
Federal Shipping
|
602.1200
|
0
|
0
|
2
|
0
|
69 |
Ireland
|
|
Speedy Express
|
262.7100
|
0
|
0
|
2
|
0
|
70 |
Ireland
|
|
United Package
|
1890.4100
|
0
|
0
|
2
|
0
|
71 |
Ireland
|
Cork
|
|
2755.2400
|
0
|
0
|
1
|
1
|
72 |
Italy
|
|
Federal Shipping
|
203.3600
|
0
|
0
|
2
|
0
|
73 |
Italy
|
|
Speedy Express
|
452.6500
|
0
|
0
|
2
|
0
|
74 |
Italy
|
|
United Package
|
208.4300
|
0
|
0
|
2
|
0
|
75 |
Italy
|
Bergamo
|
|
469.7500
|
0
|
0
|
1
|
1
|
76 |
Italy
|
Reggio Emilia
|
|
319.5600
|
0
|
0
|
1
|
1
|
77 |
Italy
|
Torino
|
|
75.1300
|
0
|
0
|
1
|
1
|
78 |
Mexico
|
|
Federal Shipping
|
418.3400
|
0
|
0
|
2
|
0
|
79 |
Mexico
|
|
Speedy Express
|
176.3100
|
0
|
0
|
2
|
0
|
80 |
Mexico
|
|
United Package
|
528.1300
|
0
|
0
|
2
|
0
|
81 |
Mexico
|
México D.F.
|
|
1122.7800
|
0
|
0
|
1
|
1
|
82 |
Norway
|
|
Federal Shipping
|
38.6400
|
0
|
0
|
2
|
0
|
83 |
Norway
|
|
Speedy Express
|
13.3700
|
0
|
0
|
2
|
0
|
84 |
Norway
|
|
United Package
|
223.4900
|
0
|
0
|
2
|
0
|
85 |
Norway
|
Stavern
|
|
275.5000
|
0
|
0
|
1
|
1
|
86 |
Poland
|
|
Federal Shipping
|
66.0600
|
0
|
0
|
2
|
0
|
87 |
Poland
|
|
Speedy Express
|
8.7200
|
0
|
0
|
2
|
0
|
88 |
Poland
|
|
United Package
|
100.9600
|
0
|
0
|
2
|
0
|
89 |
Poland
|
Warszawa
|
|
175.7400
|
0
|
0
|
1
|
1
|
90 |
Portugal
|
|
Federal Shipping
|
256.0400
|
0
|
0
|
2
|
0
|
91 |
Portugal
|
|
Speedy Express
|
67.7200
|
0
|
0
|
2
|
0
|
92 |
Portugal
|
|
United Package
|
319.7700
|
0
|
0
|
2
|
0
|
93 |
Portugal
|
Lisboa
|
|
643.5300
|
0
|
0
|
1
|
1
|
94 |
Spain
|
|
Federal Shipping
|
128.5200
|
0
|
0
|
2
|
0
|
95 |
Spain
|
|
Speedy Express
|
185.3300
|
0
|
0
|
2
|
0
|
96 |
Spain
|
|
United Package
|
548.0400
|
0
|
0
|
2
|
0
|
97 |
Spain
|
Barcelona
|
|
37.9800
|
0
|
0
|
1
|
1
|
98 |
Spain
|
Madrid
|
|
255.6400
|
0
|
0
|
1
|
1
|
99 |
Spain
|
Sevilla
|
|
568.2700
|
0
|
0
|
1
|
1
|
100 |
Sweden
|
|
Federal Shipping
|
521.9900
|
0
|
0
|
2
|
0
|
101 |
Sweden
|
|
Speedy Express
|
968.7000
|
0
|
0
|
2
|
0
|
102 |
Sweden
|
|
United Package
|
1746.9100
|
0
|
0
|
2
|
0
|
103 |
Sweden
|
Bräcke
|
|
1678.0800
|
0
|
0
|
1
|
1
|
104 |
Sweden
|
Luleå
|
|
1559.5200
|
0
|
0
|
1
|
1
|
105 |
Switzerland
|
|
Federal Shipping
|
625.2200
|
0
|
0
|
2
|
0
|
106 |
Switzerland
|
|
Speedy Express
|
250.5300
|
0
|
0
|
2
|
0
|
107 |
Switzerland
|
|
United Package
|
492.7800
|
0
|
0
|
2
|
0
|
108 |
Switzerland
|
Bern
|
|
367.2400
|
0
|
0
|
1
|
1
|
109 |
Switzerland
|
Genève
|
|
1001.2900
|
0
|
0
|
1
|
1
|
110 |
UK
|
|
Federal Shipping
|
984.7100
|
0
|
0
|
2
|
0
|
111 |
UK
|
|
Speedy Express
|
735.8800
|
0
|
0
|
2
|
0
|
112 |
UK
|
|
United Package
|
1233.6800
|
0
|
0
|
2
|
0
|
113 |
UK
|
Cowes
|
|
363.6500
|
0
|
0
|
1
|
1
|
114 |
UK
|
London
|
|
2590.6200
|
0
|
0
|
1
|
1
|
115 |
USA
|
|
Federal Shipping
|
5697.9900
|
0
|
0
|
2
|
0
|
116 |
USA
|
|
Speedy Express
|
2294.7200
|
0
|
0
|
2
|
0
|
117 |
USA
|
|
United Package
|
5778.5800
|
0
|
0
|
2
|
0
|
118 |
USA
|
Albuquerque
|
|
2134.2100
|
0
|
0
|
1
|
1
|
119 |
USA
|
Anchorage
|
|
983.5300
|
0
|
0
|
1
|
1
|
120 |
USA
|
Boise
|
|
6683.7000
|
0
|
0
|
1
|
1
|
121 |
USA
|
Butte
|
|
129.9600
|
0
|
0
|
1
|
1
|
122 |
USA
|
Elgin
|
|
207.0800
|
0
|
0
|
1
|
1
|
123 |
USA
|
Eugene
|
|
1087.6100
|
0
|
0
|
1
|
1
|
124 |
USA
|
Kirkland
|
|
70.0100
|
0
|
0
|
1
|
1
|
125 |
USA
|
Lander
|
|
558.6700
|
0
|
0
|
1
|
1
|
126 |
USA
|
Portland
|
|
341.9500
|
0
|
0
|
1
|
1
|
127 |
USA
|
San Francisco
|
|
202.1100
|
0
|
0
|
1
|
1
|
128 |
USA
|
Seattle
|
|
1353.0600
|
0
|
0
|
1
|
1
|
129 |
USA
|
Walla Walla
|
|
19.4000
|
0
|
0
|
1
|
1
|
130 |
Venezuela
|
|
Federal Shipping
|
760.9200
|
0
|
0
|
2
|
0
|
131 |
Venezuela
|
|
Speedy Express
|
821.3400
|
0
|
0
|
2
|
0
|
132 |
Venezuela
|
|
United Package
|
1152.9200
|
0
|
0
|
2
|
0
|
133 |
Venezuela
|
Barquisimeto
|
|
734.4100
|
0
|
0
|
1
|
1
|
134 |
Venezuela
|
Caracas
|
|
67.8000
|
0
|
0
|
1
|
1
|
135 |
Venezuela
|
I. de Margarita
|
|
673.8100
|
0
|
0
|
1
|
1
|
136 |
Venezuela
|
San Cristóbal
|
|
1259.1600
|
0
|
0
|
1
|
1
|
3. Usage of GROUPING_ID to Filter Aggregation Levels
SQL Server Query 3
SELECT
c.Country,
c.City,
SUM(o.Freight) AS TotalFreight
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP (c.Country, c.City)
HAVING GROUPING_ID(c.Country, c.City) = 1 -- Filter for subtotals by Country
ORDER BY c.Country;
Create SQL query with SqlQueryBuilder 3
.Select()
.Columns("c.Country", "c.City")
.Column(new SUM(new Column("o.Freight")), "TotalFreight")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "o")
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.GroupBy(new GroupBy("c.Country", "c.City").WithRollUp())
.Having(new Having(new GROUPING_ID(new Column("c.Country"), new Column("c.City")).Equale(1)))
.OrderBy(new OrderBy().SetColumnAscending("c.Country"))
.Build();
Query build by SqlQueryBuilder 3
SELECT c.Country,
c.City,
SUM(o.Freight) AS TotalFreight
FROM Customers AS c
INNER JOIN
Orders AS o
ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP(c.Country, c.City)
HAVING GROUPING_ID(c.Country, c.City) = @pMAIN_2507200130335603160
ORDER BY c.Country ASC;
Parameters (If used)
Name |
Value |
@pMAIN_2507200130335603160 |
1 |
Query Results 3:
|
Country |
City |
TotalFreight |
1 |
Argentina
|
|
598.5800
|
2 |
Austria
|
|
7391.5000
|
3 |
Belgium
|
|
1280.1400
|
4 |
Brazil
|
|
4880.1900
|
5 |
Canada
|
|
2198.0900
|
6 |
Denmark
|
|
1396.1900
|
7 |
Finland
|
|
910.8900
|
8 |
France
|
|
4237.8400
|
9 |
Germany
|
|
11283.2800
|
10 |
Ireland
|
|
2755.2400
|
11 |
Italy
|
|
864.4400
|
12 |
Mexico
|
|
1122.7800
|
13 |
Norway
|
|
275.5000
|
14 |
Poland
|
|
175.7400
|
15 |
Portugal
|
|
643.5300
|
16 |
Spain
|
|
861.8900
|
17 |
Sweden
|
|
3237.6000
|
18 |
Switzerland
|
|
1368.5300
|
19 |
UK
|
|
2954.2700
|
20 |
USA
|
|
13771.2900
|
21 |
Venezuela
|
|
2735.1800
|
4. Usage of GROUPING_ID with CASE Statements for Clarity
SQL Server Query 4
SELECT
CASE GROUPING_ID(c.Country, c.City)
WHEN 0 THEN 'Total for City'
WHEN 1 THEN 'Subtotal for Country'
WHEN 3 THEN 'Grand Total'
ELSE 'Unknown'
END AS AggregationLevel,
c.Country,
c.City,
SUM(o.Freight) AS TotalFreight
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP (c.Country, c.City)
ORDER BY GROUPING_ID(c.Country, c.City), c.Country, c.City;
Create SQL query with SqlQueryBuilder 4
var (sql4, parameters4) = new SqlQueryBuilder()
.Select()
.Column(new CASE(new GROUPING_ID(new Column("c.Country"), new Column("c.City")))
.When(0).Then("Total for City")
.When(1).Then("Subtotal for Country")
.When(3).Then("Grand Total")
.Else("Unknown")
, "AggregationLevel")
.Columns("c.Country", "c.City")
.Column(new SUM(new Column("o.Freight")), "TotalFreight")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "o")
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.GroupBy(new GroupBy("c.Country", "c.City").WithRollUp())
.OrderBy(new OrderBy().Set(new GROUPING_ID(new Column("c.Country"), new Column("c.City")))
.SetColumnAscending("c.Country")
.SetColumnAscending("c.City"))
.Build();
Query build by SqlQueryBuilder 4
SELECT CASE GROUPING_ID(c.Country, c.City) WHEN @pMAIN_2507200130335731180 THEN @pMAIN_2507200130335731181 WHEN @pMAIN_2507200130335731182 THEN @pMAIN_2507200130335731183 WHEN @pMAIN_2507200130335731184 THEN @pMAIN_2507200130335731185 ELSE @pMAIN_2507200130335731186 END AS AggregationLevel,
c.Country,
c.City,
SUM(o.Freight) AS TotalFreight
FROM Customers AS c
INNER JOIN
Orders AS o
ON c.CustomerID = o.CustomerID
GROUP BY ROLLUP(c.Country, c.City)
ORDER BY GROUPING_ID(c.Country, c.City) ASC, c.Country ASC, c.City ASC;
Parameters (If used)
Name |
Value |
@pMAIN_2507200130335731180 |
0 |
@pMAIN_2507200130335731181 |
Total for City |
@pMAIN_2507200130335731182 |
1 |
@pMAIN_2507200130335731183 |
Subtotal for Country |
@pMAIN_2507200130335731184 |
3 |
@pMAIN_2507200130335731185 |
Grand Total |
@pMAIN_2507200130335731186 |
Unknown |
Query Results 4:
|
AggregationLevel |
Country |
City |
TotalFreight |
1 |
Total for City
|
Argentina
|
Buenos Aires
|
598.5800
|
2 |
Total for City
|
Austria
|
Graz
|
6205.3900
|
3 |
Total for City
|
Austria
|
Salzburg
|
1186.1100
|
4 |
Total for City
|
Belgium
|
Bruxelles
|
458.9100
|
5 |
Total for City
|
Belgium
|
Charleroi
|
821.2300
|
6 |
Total for City
|
Brazil
|
Campinas
|
322.3800
|
7 |
Total for City
|
Brazil
|
Resende
|
194.7100
|
8 |
Total for City
|
Brazil
|
Rio de Janeiro
|
1685.2700
|
9 |
Total for City
|
Brazil
|
Sao Paulo
|
2677.8300
|
10 |
Total for City
|
Canada
|
Montréal
|
1394.2200
|
11 |
Total for City
|
Canada
|
Tsawassen
|
793.9500
|
12 |
Total for City
|
Canada
|
Vancouver
|
9.9200
|
13 |
Total for City
|
Denmark
|
Århus
|
947.3400
|
14 |
Total for City
|
Denmark
|
Kobenhavn
|
448.8500
|
15 |
Total for City
|
Finland
|
Helsinki
|
88.4100
|
16 |
Total for City
|
Finland
|
Oulu
|
822.4800
|
17 |
Total for City
|
France
|
Lille
|
637.9400
|
18 |
Total for City
|
France
|
Lyon
|
493.2500
|
19 |
Total for City
|
France
|
Marseille
|
1357.8700
|
20 |
Total for City
|
France
|
Nantes
|
235.1200
|
21 |
Total for City
|
France
|
Paris
|
108.2800
|
22 |
Total for City
|
France
|
Reims
|
58.4100
|
23 |
Total for City
|
France
|
Strasbourg
|
623.6600
|
24 |
Total for City
|
France
|
Toulouse
|
635.8200
|
25 |
Total for City
|
France
|
Versailles
|
87.4900
|
26 |
Total for City
|
Germany
|
Aachen
|
306.0400
|
27 |
Total for City
|
Germany
|
Berlin
|
225.5800
|
28 |
Total for City
|
Germany
|
Brandenburg
|
813.6800
|
29 |
Total for City
|
Germany
|
Cunewalde
|
5605.6300
|
30 |
Total for City
|
Germany
|
Frankfurt a.M.
|
1017.0300
|
31 |
Total for City
|
Germany
|
Köln
|
862.7400
|
32 |
Total for City
|
Germany
|
Leipzig
|
322.0400
|
33 |
Total for City
|
Germany
|
Mannheim
|
168.2600
|
34 |
Total for City
|
Germany
|
München
|
1403.4400
|
35 |
Total for City
|
Germany
|
Münster
|
125.9700
|
36 |
Total for City
|
Germany
|
Stuttgart
|
432.8700
|
37 |
Total for City
|
Ireland
|
Cork
|
2755.2400
|
38 |
Total for City
|
Italy
|
Bergamo
|
469.7500
|
39 |
Total for City
|
Italy
|
Reggio Emilia
|
319.5600
|
40 |
Total for City
|
Italy
|
Torino
|
75.1300
|
41 |
Total for City
|
Mexico
|
México D.F.
|
1122.7800
|
42 |
Total for City
|
Norway
|
Stavern
|
275.5000
|
43 |
Total for City
|
Poland
|
Warszawa
|
175.7400
|
44 |
Total for City
|
Portugal
|
Lisboa
|
643.5300
|
45 |
Total for City
|
Spain
|
Barcelona
|
37.9800
|
46 |
Total for City
|
Spain
|
Madrid
|
255.6400
|
47 |
Total for City
|
Spain
|
Sevilla
|
568.2700
|
48 |
Total for City
|
Sweden
|
Bräcke
|
1678.0800
|
49 |
Total for City
|
Sweden
|
Luleå
|
1559.5200
|
50 |
Total for City
|
Switzerland
|
Bern
|
367.2400
|
51 |
Total for City
|
Switzerland
|
Genève
|
1001.2900
|
52 |
Total for City
|
UK
|
Cowes
|
363.6500
|
53 |
Total for City
|
UK
|
London
|
2590.6200
|
54 |
Total for City
|
USA
|
Albuquerque
|
2134.2100
|
55 |
Total for City
|
USA
|
Anchorage
|
983.5300
|
56 |
Total for City
|
USA
|
Boise
|
6683.7000
|
57 |
Total for City
|
USA
|
Butte
|
129.9600
|
58 |
Total for City
|
USA
|
Elgin
|
207.0800
|
59 |
Total for City
|
USA
|
Eugene
|
1087.6100
|
60 |
Total for City
|
USA
|
Kirkland
|
70.0100
|
61 |
Total for City
|
USA
|
Lander
|
558.6700
|
62 |
Total for City
|
USA
|
Portland
|
341.9500
|
63 |
Total for City
|
USA
|
San Francisco
|
202.1100
|
64 |
Total for City
|
USA
|
Seattle
|
1353.0600
|
65 |
Total for City
|
USA
|
Walla Walla
|
19.4000
|
66 |
Total for City
|
Venezuela
|
Barquisimeto
|
734.4100
|
67 |
Total for City
|
Venezuela
|
Caracas
|
67.8000
|
68 |
Total for City
|
Venezuela
|
I. de Margarita
|
673.8100
|
69 |
Total for City
|
Venezuela
|
San Cristóbal
|
1259.1600
|
70 |
Subtotal for Country
|
Argentina
|
|
598.5800
|
71 |
Subtotal for Country
|
Austria
|
|
7391.5000
|
72 |
Subtotal for Country
|
Belgium
|
|
1280.1400
|
73 |
Subtotal for Country
|
Brazil
|
|
4880.1900
|
74 |
Subtotal for Country
|
Canada
|
|
2198.0900
|
75 |
Subtotal for Country
|
Denmark
|
|
1396.1900
|
76 |
Subtotal for Country
|
Finland
|
|
910.8900
|
77 |
Subtotal for Country
|
France
|
|
4237.8400
|
78 |
Subtotal for Country
|
Germany
|
|
11283.2800
|
79 |
Subtotal for Country
|
Ireland
|
|
2755.2400
|
80 |
Subtotal for Country
|
Italy
|
|
864.4400
|
81 |
Subtotal for Country
|
Mexico
|
|
1122.7800
|
82 |
Subtotal for Country
|
Norway
|
|
275.5000
|
83 |
Subtotal for Country
|
Poland
|
|
175.7400
|
84 |
Subtotal for Country
|
Portugal
|
|
643.5300
|
85 |
Subtotal for Country
|
Spain
|
|
861.8900
|
86 |
Subtotal for Country
|
Sweden
|
|
3237.6000
|
87 |
Subtotal for Country
|
Switzerland
|
|
1368.5300
|
88 |
Subtotal for Country
|
UK
|
|
2954.2700
|
89 |
Subtotal for Country
|
USA
|
|
13771.2900
|
90 |
Subtotal for Country
|
Venezuela
|
|
2735.1800
|
91 |
Grand Total
|
|
|
64942.6900
|