SELECT predicate WHERE and GROUP BY


1. Total Orders per Customer

SQL Server Query 1

            
 SELECT TOP 30  
C.CompanyName,
COUNT(O.OrderID) AS TotalOrders
FROM
Customers AS C
JOIN
Orders AS O ON C.CustomerID = O.CustomerID
GROUP BY
C.CompanyName
ORDER BY
TotalOrders DESC;

Create SQL query with SqlQueryBuilder 1

            
 var (sql1, parameters1) = new SqlQueryBuilder()  
.Select().Top(30)
.Column("c.CompanyName")
.Column(new COUNT(new Column("O.OrderID")), "TotalOrders")
.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.CompanyName"))
.OrderBy(new OrderBy().SetColumnDescending("TotalOrders"))
.Build();

Query build by SqlQueryBuilder 1

            
SELECT TOP 30 c.CompanyName,
              COUNT(O.OrderID) AS TotalOrders
FROM Customers AS C
     INNER JOIN
     Orders AS O
     ON C.CustomerID = O.CustomerID
GROUP BY C.CompanyName
ORDER BY TotalOrders DESC;


            
        

Parameters (If used)

Name Value

Query Results 1:

  CompanyName TotalOrders
1 Save-a-lot Markets 31
2 Ernst Handel 30
3 QUICK-Stop 28
4 Folk och fä HB 19
5 Hungry Owl All-Night Grocers 19
6 Berglunds snabbköp 18
7 HILARION-Abastos 18
8 Rattlesnake Canyon Grocery 18
9 Bon app' 17
10 Frankenversand 15
11 Lehmanns Marktstand 15
12 Wartian Herkku 15
13 Bottom-Dollar Markets 14
14 Hanari Carnes 14
15 Königlich Essen 14
16 La maison d'Asie 14
17 LILA-Supermercado 14
18 White Clover Markets 14
19 Around the Horn 13
20 Mère Paillarde 13
21 Queen Cozinha 13
22 LINO-Delicateses 12
23 Reggiani Caseifici 12
24 Suprêmes délices 12
25 Blondesddsl père et fils 11
26 Great Lakes Food Market 11
27 Ricardo Adocicados 11
28 Vaffeljernet 11
29 B's Beverages 10
30 Die Wandernde Kuh 10


2. Total Sales Value per Employee per Year

SQL Server Query 2

            
 SELECT  
E.FirstName + ' ' + E.LastName AS EmployeeName,
YEAR(O.OrderDate) AS OrderYear,
SUM(OD.Quantity * OD.UnitPrice * (1 - OD.Discount)) AS TotalSalesValue
FROM
Employees AS E
JOIN
Orders AS O ON E.EmployeeID = O.EmployeeID
JOIN
[Order Details] AS OD ON O.OrderID = OD.OrderID
GROUP BY
E.FirstName,
E.LastName,
YEAR(O.OrderDate)
ORDER BY
EmployeeName,
OrderYear;

Create SQL query with SqlQueryBuilder 2

            
 var (sql2, parameters2) = new SqlQueryBuilder()  
.Select()
.Column(new CONCAT(new Column("E.FirstName"), " ", new Column("E.LastName")), "EmployeeName")
.Column(new YEAR(new Column("O.OrderDate")), "OrderYear")
.Column(new SUM(new ColumnArithmatic("OD.Quantity").MULTIPLY(new Column("OD.UnitPrice"))
.MULTIPLY().StartBracket(1).SUBTRACT(new Column("OD.Discount")).EndBracket()), "TotalSalesValue")
.From("Employees", "E")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Orders", "O")
.On(new Column("E.EmployeeID").Equale(new Column("O.EmployeeID"))),
new INNERJOIN().TableName("[Order Details]", "OD")
.On(new Column("O.OrderID").Equale(new Column("OD.OrderID")))
})
.GroupBy(new GroupBy(new Column("E.FirstName"), new Column("E.LastName"),
new YEAR(new Column("O.OrderDate"))))
.OrderBy(new OrderBy().SetColumnAscending("EmployeeName")
.SetColumnAscending("OrderYear"))
.Build();

Query build by SqlQueryBuilder 2

            
SELECT CONCAT(E.FirstName, @pMAIN_2507200205126502650, E.LastName) AS EmployeeName,
       YEAR(O.OrderDate) AS OrderYear,
       SUM(OD.Quantity * OD.UnitPrice * (@pMAIN_2507200205126502651 - OD.Discount)) AS TotalSalesValue
FROM Employees AS E
     INNER JOIN
     Orders AS O
     ON E.EmployeeID = O.EmployeeID
     INNER JOIN
     [Order Details] AS OD
     ON O.OrderID = OD.OrderID
GROUP BY E.FirstName, E.LastName, YEAR(O.OrderDate)
ORDER BY EmployeeName ASC, OrderYear ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507200205126502650
@pMAIN_2507200205126502651 1

Query Results 2:

  EmployeeName OrderYear TotalSalesValue
1 Andrew Fuller 1996 21757.0598373413
2 Andrew Fuller 1997 70444.1401109696
3 Andrew Fuller 1998 74336.5550298691
4 Anne Dodsworth 1996 9894.51510620117
5 Anne Dodsworth 1997 26310.3926029205
6 Anne Dodsworth 1998 41103.1590003967
7 Janet Leverling 1996 18223.9599437714
8 Janet Leverling 1997 108026.155358315
9 Janet Leverling 1998 76562.7274913788
10 Laura Callahan 1996 22240.119972229
11 Laura Callahan 1997 56032.6150627136
12 Laura Callahan 1998 48589.5426692963
13 Margaret Peacock 1996 49945.1149682999
14 Margaret Peacock 1997 128809.791022301
15 Margaret Peacock 1998 54135.939956665
16 Michael Suyama 1996 16642.6048812866
17 Michael Suyama 1997 43126.3693714142
18 Michael Suyama 1998 14144.1549911499
19 Nancy Davolio 1996 35764.5149040222
20 Nancy Davolio 1997 93148.077507019
21 Nancy Davolio 1998 63195.0119094849
22 Robert King 1996 15232.160068512
23 Robert King 1997 60471.1956977844
24 Robert King 1998 48864.8796157837
25 Steven Buchanan 1996 18383.9199714661
26 Steven Buchanan 1997 30716.4676322937
27 Steven Buchanan 1998 19691.8949356079


3. Calculate the total sales value for each month of every year.

SQL Server Query 3

            
 SELECT  
YEAR(O.OrderDate) AS OrderYear,
MONTH(O.OrderDate) AS OrderMonth,
SUM(OD.Quantity * OD.UnitPrice * (1 - OD.Discount)) AS TotalSalesValue
FROM
Orders AS O
JOIN
[Order Details] AS OD ON O.OrderID = OD.OrderID
GROUP BY
YEAR(O.OrderDate), -- Function used directly in GROUP BY
MONTH(O.OrderDate) -- Function used directly in GROUP BY
ORDER BY
OrderYear,
OrderMonth;

Create SQL query with SqlQueryBuilder 3

            
 var (sql3, parameters3) = new SqlQueryBuilder()  
.Select()
.Column(new YEAR(new Column("O.OrderDate")), "OrderYear")
.Column(new MONTH(new Column("O.OrderDate")), "OrderMonth")
.Column(new SUM(new ColumnArithmatic("OD.Quantity").MULTIPLY("OD.UnitPrice")
.MULTIPLY().StartBracket(1).SUBTRACT("OD.Discount").EndBracket()), "TotalSalesValue")
.From("Orders", "O")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("[Order Details]","OD")
.On(new Column("O.OrderID").Equale(new Column("OD.OrderID")))
})
.GroupBy(new GroupBy(new YEAR(new Column("O.OrderDate")), new MONTH(new Column("O.OrderDate"))))
.OrderBy(new OrderBy()
.SetColumnAscending("OrderYear")
.SetColumnAscending("OrderMonth"))
.Build();

Query build by SqlQueryBuilder 3

            
SELECT YEAR(O.OrderDate) AS OrderYear,
       MONTH(O.OrderDate) AS OrderMonth,
       SUM(OD.Quantity * OD.UnitPrice * (@pMAIN_2507200205126655620 - OD.Discount)) AS TotalSalesValue
FROM Orders AS O
     INNER JOIN
     [Order Details] AS OD
     ON O.OrderID = OD.OrderID
GROUP BY YEAR(O.OrderDate), MONTH(O.OrderDate)
ORDER BY OrderYear ASC, OrderMonth ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507200205126655620 1

Query Results 3:

  OrderYear OrderMonth TotalSalesValue
1 1996 7 27861.8949737549
2 1996 8 25485.2749700546
3 1996 9 26381.3999729156
4 1996 10 37515.7251968384
5 1996 11 45600.0448436737
6 1996 12 45239.6296958923
7 1997 1 61258.0704631805
8 1997 2 38483.6349811554
9 1997 3 38547.2199964523
10 1997 4 53032.9525184631
11 1997 5 53781.2900390625
12 1997 6 36362.802532196
13 1997 7 51020.8575267792
14 1997 8 47287.6703300476
15 1997 9 55629.2424850464
16 1997 10 66749.2258796692
17 1997 11 43533.809015274
18 1997 12 71398.4285984039
19 1998 1 94222.1105527878
20 1998 2 99415.2873382568
21 1998 3 104854.155029297
22 1998 4 123798.682136536
23 1998 5 18333.6305427551