Queries for Customers


1. Customers who are either from 'USA' and have placed more than 5 orders, OR are from 'Canada' and have placed any order, OR are from 'Mexico' and have a Fax number.

SQL Server Query 1

            
 SELECT  
c.CustomerID,
c.CompanyName,
c.Country,
c.Fax
FROM Customers c
WHERE
(c.Country = 'USA' AND (SELECT COUNT(o.OrderID) FROM Orders o WHERE o.CustomerID = c.CustomerID) > 5)
OR
(c.Country = 'Canada' AND EXISTS (SELECT 1 FROM Orders o2 WHERE o2.CustomerID = c.CustomerID))
OR
(c.Country = 'Mexico' AND c.Fax IS NOT NULL);

Create SQL query with SqlQueryBuilder 1

            
 var (sql1, parameters1) = new SqlQueryBuilder()  
.Select()
.Columns("c.CustomerID"," c.CompanyName"," c.Country"," c.Fax")
.From("Customers", "c")
.Where(
new Where()
.StartBracket(new Column("c.Country").Equale("USA"))
.AND(
new SqlQueryBuilder().Select().Column(new COUNT(new Column("o.OrderID"))).From("Orders","o")
.Where(new Where(new Column("o.CustomerID").Equale(new Column("c.CustomerID")))).GreaterThan(5)
).EndBracket().OR()
.StartBracket(new Column("c.Country").Equale("Canada"))
.AND(new EXISTS(new SqlQueryBuilder().Select().ColumnWithValue("1","Col1").From("Orders","o2")
.Where(new Where(new Column("o2.CustomerID").Equale(new Column("c.CustomerID")))))
).EndBracket().OR()
.StartBracket(new Column("c.Country").Equale("Mexico")).AND(new IS_NOT_NULL(new Column("c.Fax"))).EndBracket()
)
.Build();

Query build by SqlQueryBuilder 1

            
SELECT c.CustomerID,
       c.CompanyName,
       c.Country,
       c.Fax
FROM Customers AS c
WHERE (c.Country = @pMAIN_2507192051423347760
       AND (SELECT COUNT(o.OrderID)
            FROM Orders AS o
            WHERE o.CustomerID = c.CustomerID) > @pMAIN_2507192051423347761)
      OR (c.Country = @pMAIN_2507192051423347762
          AND EXISTS (SELECT @pMAIN_2507192051423347763 AS Col1
                      FROM Orders AS o2
                      WHERE o2.CustomerID = c.CustomerID))
      OR (c.Country = @pMAIN_2507192051423347764
          AND c.Fax IS NOT NULL);


            
        

Parameters (If used)

Name Value
@pMAIN_2507192051423347760 USA
@pMAIN_2507192051423347761 5
@pMAIN_2507192051423347762 Canada
@pMAIN_2507192051423347763 1
@pMAIN_2507192051423347764 Mexico

Query Results 1:

  CustomerID CompanyName Country Fax
1 ANATR Ana Trujillo Emparedados y helados Mexico (5) 555-3745
2 BOTTM Bottom-Dollar Markets Canada (604) 555-3745
3 CENTC Centro comercial Moctezuma Mexico (5) 555-7293
4 GREAL Great Lakes Food Market USA
5 LAUGB Laughing Bacchus Wine Cellars Canada (604) 555-7293
6 LONEP Lonesome Pine Restaurant USA (503) 555-9646
7 MEREP Mère Paillarde Canada (514) 555-8055
8 OLDWO Old World Delicatessen USA (907) 555-2880
9 PERIC Pericles Comidas clásicas Mexico (5) 545-3745
10 RATTC Rattlesnake Canyon Grocery USA (505) 555-3620
11 SAVEA Save-a-lot Markets USA
12 SPLIR Split Rail Beer & Ale USA (307) 555-6525
13 WHITC White Clover Markets USA (206) 555-4115


2. Find Customers Who Have Placed Orders BUT NOT Ordered 'Chai' in the Last 6 Months, AND have a 'PostalCode' that is purely numeric and starts with '9'

SQL Server Query 2

            
 SELECT  
c.CustomerID,
c.CompanyName,
c.ContactName,
c.ContactTitle,
c.PostalCode
FROM Customers c
WHERE
-- Condition 1: Customer has NOT ordered 'Chai' in the last 6 months
NOT EXISTS (
SELECT 1
FROM Orders o2
JOIN [Order Details] od ON o2.OrderID = od.OrderID
JOIN Products p ON od.ProductID = p.ProductID
WHERE o2.CustomerID = c.CustomerID
AND p.ProductName = 'Chai'
AND o2.OrderDate >= DATEADD(month, -6, GETDATE()) -- Orders within the last 6 months
)
AND
-- Condition 2: PostalCode is purely numeric (using TRY_CAST for safety) AND starts with '9'
TRY_CAST(c.PostalCode AS INT) IS NOT NULL -- Ensures it's numeric
AND c.PostalCode LIKE '9%'; -- Starts with '9'

Create SQL query with SqlQueryBuilder 2

            
 var (sql2, parameters2) = new SqlQueryBuilder()  
.Select()
.Columns("c.CustomerID", "c.CompanyName", "c.ContactName", "c.ContactTitle", "c.PostalCode")
.From("Customers", "c")
.Where(
new Where(new NOT_EXISTS(
new SqlQueryBuilder().Select().ColumnWithValue(1, "col1")
.From("Orders","o2")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("[Order Details]","od")
.On(new Column("o2.OrderID").Equale(new Column("od.OrderID"))),
new INNERJOIN().TableName("Products","p")
.On(new Column("od.ProductID").Equale(new Column("p.ProductID")))
})
.Where(new Where(new Column("o2.CustomerID").Equale(new Column("c.CustomerID")))
.AND(new Column("p.ProductName").Equale("Chai"))
.AND(new Column("o2.OrderDate").GreaterThan(new DATEADD(SqlDateInterval.month, -6, new GETDATE()))))
)).AND(new IS_NOT_NULL(new TRY_CAST(new Column("c.PostalCode"), SqlDataType.INT)))
.AND(new LIKE(new Column("c.PostalCode"), "9%"))
)
.Build();

Query build by SqlQueryBuilder 2

            
SELECT c.CustomerID,
       c.CompanyName,
       c.ContactName,
       c.ContactTitle,
       c.PostalCode
FROM Customers AS c
WHERE NOT EXISTS (SELECT @pMAIN_2507192051423463860 AS col1
                  FROM Orders AS o2
                       INNER JOIN
                       [Order Details] AS od
                       ON o2.OrderID = od.OrderID
                       INNER JOIN
                       Products AS p
                       ON od.ProductID = p.ProductID
                  WHERE o2.CustomerID = c.CustomerID
                        AND p.ProductName = @pMAIN_2507192051423463861
                        AND o2.OrderDate > DATEADD(month, @pMAIN_2507192051423463862, GETDATE()))
      AND TRY_CAST (c.PostalCode AS INT) IS NOT NULL
      AND c.PostalCode LIKE @pMAIN_2507192051423463863;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192051423463860 1
@pMAIN_2507192051423463861 Chai
@pMAIN_2507192051423463862 -6
@pMAIN_2507192051423463863 9%

Query Results 2:

  CustomerID CompanyName ContactName ContactTitle PostalCode
1 GREAL Great Lakes Food Market Howard Snyder Marketing Manager 97403
2 HUNGC Hungry Coyote Import Store Yoshi Latimer Sales Representative 97827
3 LAZYK Lazy K Kountry Store John Steel Marketing Manager 99362
4 LETSS Let's Stop N Shop Jaime Yorres Owner 94117
5 LONEP Lonesome Pine Restaurant Fran Wilson Sales Manager 97219
6 OLDWO Old World Delicatessen Rene Phillips Sales Representative 99508
7 THEBI The Big Cheese Liz Nixon Marketing Manager 97201
8 TRAIH Trail's Head Gourmet Provisioners Helvetius Nagy Sales Associate 98034
9 WARTH Wartian Herkku Pirkko Koskitalo Accounting Manager 90110
10 WHITC White Clover Markets Karl Jablonski Owner 98128


3. Find the Top 3 Customers by Total Order Value in Each Country, along with their Rank, and show their first and last order dates. If a customer ordered nothing, they should not appear.

SQL Server Query 3

            
 WITH CustomerOrderValue AS (  
-- Calculate total order value per customer
SELECT
c.CustomerID,
c.CompanyName,
c.Country,
SUM(od.Quantity * od.UnitPrice * (1 - od.Discount)) AS TotalOrderValue,
MIN(o.OrderDate) AS FirstOrderDate,
MAX(o.OrderDate) AS LastOrderDate
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
JOIN [Order Details] od ON o.OrderID = od.OrderID
GROUP BY c.CustomerID, c.CompanyName, c.Country
),
RankedCustomers AS (
-- Rank customers by TotalOrderValue within each country
SELECT
CustomerID,
CompanyName,
Country,
TotalOrderValue,
FirstOrderDate,
LastOrderDate,
DENSE_RANK() OVER (PARTITION BY Country ORDER BY TotalOrderValue DESC) AS CountryRank
FROM CustomerOrderValue
)
SELECT
rc.Country,
rc.CountryRank,
rc.CompanyName,
rc.TotalOrderValue,
rc.FirstOrderDate,
rc.LastOrderDate
FROM RankedCustomers rc
WHERE rc.CountryRank <= 3
ORDER BY rc.Country, rc.CountryRank;

Create SQL query with SqlQueryBuilder 3

            
 var (sql3, parameters3) = new SqlQueryBuilder()  
.WithCTETable(new Table("CustomerOrderValue"), new SqlQueryBuilder()
.Select().Columns("c.CustomerID","c.CompanyName","c.Country")
.Column(new SUM(new ColumnArithmatic(new Column("od.Quantity")).MULTIPLY(new Column("od.UnitPrice"))
.MULTIPLY().StartBracket(1).SUBTRACT(new Column("od.Discount")).EndBracket()), "TotalOrderValue")
.Column(new MIN(new Column("o.OrderDate")), "FirstOrderDate")
.Column(new MAX(new Column("o.OrderDate")), "LastOrderDate")
.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("[Order Details]","od")
.On(new Column("o.OrderID").Equale(new Column("od.OrderID"))),
})
.GroupBy(new GroupBy(new Column("c.CustomerID"), new Column("c.CompanyName"), new Column("c.Country")))
)
.WithCTETable(new Table("RankedCustomers"), new SqlQueryBuilder().Select()
.Columns("CustomerID","CompanyName","Country","TotalOrderValue","FirstOrderDate","LastOrderDate")
.Column(new DENSE_RANK().PARTITION_BY(new Column("Country")).ORDER_BY(new OrderBy().SetColumnDescending("TotalOrderValue")),
"CountryRank")
.From("CustomerOrderValue")
)
.Select()
.Columns("rc.Country","rc.CountryRank","rc.CompanyName","rc.TotalOrderValue","rc.FirstOrderDate","rc.LastOrderDate")
.From("RankedCustomers", "rc")
.Where(
new Where(new Column("rc.CountryRank").LessThanOrEqualeTo(3))
)
.OrderBy(new OrderBy().SetColumnAscending("rc.Country").SetColumnAscending("rc.CountryRank"))
.Build();

Query build by SqlQueryBuilder 3

            
WITH CustomerOrderValue
AS (SELECT c.CustomerID,
           c.CompanyName,
           c.Country,
           SUM(od.Quantity * od.UnitPrice * (@pMAIN_2507192051423667390 - od.Discount)) AS TotalOrderValue,
           MIN(o.OrderDate) AS FirstOrderDate,
           MAX(o.OrderDate) AS LastOrderDate
    FROM Customers AS c
         INNER JOIN
         Orders AS o
         ON c.CustomerID = o.CustomerID
         INNER JOIN
         [Order Details] AS od
         ON o.OrderID = od.OrderID
    GROUP BY c.CustomerID, c.CompanyName, c.Country),
 RankedCustomers
AS (SELECT CustomerID,
           CompanyName,
           Country,
           TotalOrderValue,
           FirstOrderDate,
           LastOrderDate,
           DENSE_RANK() OVER (PARTITION BY Country ORDER BY TotalOrderValue DESC) AS CountryRank
    FROM CustomerOrderValue)
SELECT rc.Country,
       rc.CountryRank,
       rc.CompanyName,
       rc.TotalOrderValue,
       rc.FirstOrderDate,
       rc.LastOrderDate
FROM RankedCustomers AS rc
WHERE rc.CountryRank <= @pMAIN_2507192051423667391
ORDER BY rc.Country ASC, rc.CountryRank ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192051423667390 1
@pMAIN_2507192051423667391 3

Query Results 3:

  Country CountryRank CompanyName TotalOrderValue FirstOrderDate LastOrderDate
1 Argentina 1 Océano Atlántico Ltda. 3460.19999694824 1/9/1997 12:00:00 AM 3/30/1998 12:00:00 AM
2 Argentina 2 Rancho grande 2844.09999084473 2/17/1997 12:00:00 AM 4/13/1998 12:00:00 AM
3 Argentina 3 Cactus Comidas para llevar 1814.79998779297 4/29/1997 12:00:00 AM 4/28/1998 12:00:00 AM
4 Austria 1 Ernst Handel 104874.978713989 7/17/1996 12:00:00 AM 5/5/1998 12:00:00 AM
5 Austria 2 Piccolo und mehr 23128.8600311279 11/13/1996 12:00:00 AM 4/27/1998 12:00:00 AM
6 Belgium 1 Suprêmes délices 24088.7799758911 7/9/1996 12:00:00 AM 4/21/1998 12:00:00 AM
7 Belgium 2 Maison Dewey 9736.07500457764 5/7/1997 12:00:00 AM 4/7/1998 12:00:00 AM
8 Brazil 1 Hanari Carnes 32841.3699417114 7/8/1996 12:00:00 AM 4/27/1998 12:00:00 AM
9 Brazil 2 Queen Cozinha 25717.4975166321 12/4/1996 12:00:00 AM 5/4/1998 12:00:00 AM
10 Brazil 3 Ricardo Adocicados 12450.8000183105 8/22/1996 12:00:00 AM 4/29/1998 12:00:00 AM
11 Canada 1 Mère Paillarde 28872.1902999878 10/17/1996 12:00:00 AM 10/30/1997 12:00:00 AM
12 Canada 2 Bottom-Dollar Markets 20801.6000213623 12/20/1996 12:00:00 AM 4/24/1998 12:00:00 AM
13 Canada 3 Laughing Bacchus Wine Cellars 522.5 4/3/1997 12:00:00 AM 1/1/1998 12:00:00 AM
14 Denmark 1 Simons bistro 16817.0975255966 10/29/1996 12:00:00 AM 5/6/1998 12:00:00 AM
15 Denmark 2 Vaffeljernet 15843.9248199463 11/28/1996 12:00:00 AM 4/2/1998 12:00:00 AM
16 Finland 1 Wartian Herkku 15648.7025642395 7/26/1996 12:00:00 AM 4/15/1998 12:00:00 AM
17 Finland 2 Wilman Kala 3161.35000610352 7/30/1997 12:00:00 AM 4/7/1998 12:00:00 AM
18 France 1 Bon app' 21963.2524261475 10/16/1996 12:00:00 AM 5/6/1998 12:00:00 AM
19 France 2 Blondesddsl père et fils 18534.0799789429 7/25/1996 12:00:00 AM 1/12/1998 12:00:00 AM
20 France 3 Folies gourmandes 11666.9000015259 1/8/1997 12:00:00 AM 12/22/1997 12:00:00 AM
21 Germany 1 QUICK-Stop 110277.304977417 8/5/1996 12:00:00 AM 4/14/1998 12:00:00 AM
22 Germany 2 Königlich Essen 30908.3839836121 10/7/1996 12:00:00 AM 4/16/1998 12:00:00 AM
23 Germany 3 Frankenversand 26656.559387207 7/29/1996 12:00:00 AM 4/9/1998 12:00:00 AM
24 Ireland 1 Hungry Owl All-Night Grocers 49979.9050006866 9/5/1996 12:00:00 AM 4/30/1998 12:00:00 AM
25 Italy 1 Magazzini Alimentari Riuniti 7176.21500205994 8/7/1996 12:00:00 AM 3/16/1998 12:00:00 AM
26 Italy 2 Reggiani Caseifici 7048.23990440369 8/23/1996 12:00:00 AM 4/30/1998 12:00:00 AM
27 Italy 3 Franchi S.p.A. 1545.69999885559 1/22/1997 12:00:00 AM 4/30/1998 12:00:00 AM
28 Mexico 1 Tortuga Restaurante 10812.1500434875 8/8/1996 12:00:00 AM 5/4/1998 12:00:00 AM
29 Mexico 2 Antonio Moreno Taquería 7023.97755432129 11/27/1996 12:00:00 AM 1/28/1998 12:00:00 AM
30 Mexico 3 Pericles Comidas clásicas 4242.20002746582 10/4/1996 12:00:00 AM 5/5/1998 12:00:00 AM
31 Norway 1 Santé Gourmet 5735.14999961853 12/18/1996 12:00:00 AM 4/10/1998 12:00:00 AM
32 Poland 1 Wolski Zajazd 3531.94997596741 12/5/1996 12:00:00 AM 4/23/1998 12:00:00 AM
33 Portugal 1 Furia Bacalhau e Frutos do Mar 6427.42259216309 10/14/1996 12:00:00 AM 3/19/1998 12:00:00 AM
34 Portugal 2 Princesa Isabel Vinhos 5044.94006347656 10/23/1996 12:00:00 AM 4/8/1998 12:00:00 AM
35 Spain 1 Godos Cocina Típica 11446.3600158691 9/11/1996 12:00:00 AM 4/21/1998 12:00:00 AM
36 Spain 2 Bólido Comidas preparadas 4232.85009765625 10/10/1996 12:00:00 AM 3/24/1998 12:00:00 AM
37 Spain 3 Romero y tomillo 1467.28999614716 8/14/1996 12:00:00 AM 4/9/1998 12:00:00 AM
38 Sweden 1 Folk och fä HB 29567.5625762939 7/24/1996 12:00:00 AM 4/27/1998 12:00:00 AM
39 Sweden 2 Berglunds snabbköp 24927.5774688721 8/12/1996 12:00:00 AM 3/4/1998 12:00:00 AM
40 Switzerland 1 Richter Supermarkt 19343.7788906097 7/12/1996 12:00:00 AM 5/6/1998 12:00:00 AM
41 Switzerland 2 Chop-suey Chinese 12348.8800125122 7/11/1996 12:00:00 AM 4/22/1998 12:00:00 AM
42 UK 1 Seven Seas Imports 16215.3250617981 11/21/1996 12:00:00 AM 2/4/1998 12:00:00 AM
43 UK 2 Eastern Connection 14761.0350036621 11/26/1996 12:00:00 AM 4/28/1998 12:00:00 AM
44 UK 3 Around the Horn 13390.6500091553 11/15/1996 12:00:00 AM 4/10/1998 12:00:00 AM
45 USA 1 Save-a-lot Markets 104361.949920654 10/8/1996 12:00:00 AM 5/1/1998 12:00:00 AM
46 USA 2 Rattlesnake Canyon Grocery 51097.8003330231 7/22/1996 12:00:00 AM 5/6/1998 12:00:00 AM
47 USA 3 White Clover Markets 27363.6050434113 7/31/1996 12:00:00 AM 5/1/1998 12:00:00 AM
48 Venezuela 1 HILARION-Abastos 22768.7639884949 7/16/1996 12:00:00 AM 4/28/1998 12:00:00 AM
49 Venezuela 2 LINO-Delicateses 16476.5650253296 1/6/1997 12:00:00 AM 4/21/1998 12:00:00 AM
50 Venezuela 3 LILA-Supermercado 16076.5999908447 8/16/1996 12:00:00 AM 5/5/1998 12:00:00 AM


4. List Customers who have ordered products from at least three different suppliers in a single order, AND their ContactTitle is 'Sales Representative' or 'Marketing Manager'.

SQL Server Query 4

            
 SELECT  
C.CustomerID,
C.CompanyName,
C.ContactTitle
FROM Customers C
WHERE
C.ContactTitle IN ('Sales Representative', 'Marketing Manager')
AND
EXISTS (
-- Find an order from this customer with products from >= 3 different suppliers
SELECT O.OrderID
FROM Orders O
WHERE O.CustomerID = C.CustomerID
AND (
SELECT COUNT(DISTINCT P.SupplierID)
FROM [Order Details] OD
JOIN Products P ON OD.ProductID = P.ProductID
WHERE OD.OrderID = O.OrderID
) >= 3
);

Create SQL query with SqlQueryBuilder 4

            
 var (sql4, parameters4) = new SqlQueryBuilder()                  
.Select()
.Columns("C.CustomerID","C.CompanyName","C.ContactTitle")
.From("Customers", "C")
.Where(
new Where(new IN(new Column("C.ContactTitle"), "Sales Representative","Marketing Manager"))
.AND(new EXISTS(
new SqlQueryBuilder().Select().Column("O.OrderID", "OrderID")
.From("Orders","O")
.Where(new Where(new Column("O.CustomerID").Equale(new Column("C.CustomerID")))
.AND(new SqlQueryBuilder().Select()
.Column(new COUNT(new Column("P.SupplierID"), true), "col1")
.From("[Order Details] OD")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName("Products","P")
.On(new Column("OD.ProductID").Equale(new Column("P.ProductID")))
})
.Where(new Where(new Column("OD.OrderID").Equale(new Column("O.OrderID"))))
.GreaterThanOrEqualeTo(3))
)
))
)
.Build();

Query build by SqlQueryBuilder 4

            
SELECT C.CustomerID,
       C.CompanyName,
       C.ContactTitle
FROM Customers AS C
WHERE C.ContactTitle IN (@pMAIN_2507192051423919330, @pMAIN_2507192051423919331)
      AND EXISTS (SELECT O.OrderID AS OrderID
                  FROM Orders AS O
                  WHERE O.CustomerID = C.CustomerID
                        AND (SELECT COUNT(DISTINCT P.SupplierID) AS col1
                             FROM [Order Details] AS OD
                                  INNER JOIN
                                  Products AS P
                                  ON OD.ProductID = P.ProductID
                             WHERE OD.OrderID = O.OrderID) >= @pMAIN_2507192051423919332);


            
        

Parameters (If used)

Name Value
@pMAIN_2507192051423919330 Sales Representative
@pMAIN_2507192051423919331 Marketing Manager
@pMAIN_2507192051423919332 3

Query Results 4:

  CustomerID CompanyName ContactTitle
1 BLONP Blondesddsl père et fils Marketing Manager
2 OLDWO Old World Delicatessen Sales Representative
3 MAGAA Magazzini Alimentari Riuniti Marketing Manager
4 ALFKI Alfreds Futterkiste Sales Representative
5 FRANK Frankenversand Marketing Manager
6 HILAA HILARION-Abastos Sales Representative
7 ISLAT Island Trading Marketing Manager
8 LEHMS Lehmanns Marktstand Sales Representative
9 TOMSP Toms Spezialitäten Marketing Manager
10 WANDK Die Wandernde Kuh Sales Representative
11 SPECD Spécialités du monde Marketing Manager
12 SAVEA Save-a-lot Markets Sales Representative
13 LACOR La corne d'abondance Sales Representative
14 GREAL Great Lakes Food Market Marketing Manager
15 PRINI Princesa Isabel Vinhos Sales Representative
16 BSBEV B's Beverages Sales Representative
17 RANCH Rancho grande Sales Representative
18 BLAUS Blauer See Delikatessen Sales Representative
19 AROUT Around the Horn Sales Representative
20 FRANR France restauration Marketing Manager
21 CONSH Consolidated Holdings Sales Representative
22 PERIC Pericles Comidas clásicas Sales Representative
23 TRADH Tradição Hipermercados Sales Representative


5. Archiving Inactive Customers with Their Last Order Details.

SQL Server Query 5

            
 SELECT  
c.CustomerID,
c.CompanyName,
c.ContactName,
c.ContactTitle,
c.Address,
c.City,
c.Region,
c.PostalCode,
c.Country,
c.Phone,
c.Fax,
o.OrderID AS LastOrderID,
o.OrderDate AS LastOrderDate,
o.Freight AS LastOrderFreight
INTO ArchivedCustomersAndLastOrder -- New table for inactive customers
FROM Customers c
OUTER APPLY (
-- Get the last order for each customer
SELECT TOP 1 OrderID, OrderDate, Freight
FROM Orders
WHERE CustomerID = c.CustomerID
ORDER BY OrderDate DESC
) AS o
WHERE o.OrderDate < '1997-01-01'; -- Only include customers whose last order was before 1997

-- View the archived data
SELECT *
FROM ArchivedCustomersAndLastOrder;

-- Clean up the new table
DROP TABLE IF EXISTS ArchivedCustomersAndLastOrder;

Create SQL query with SqlQueryBuilder 5

            
 var (sql5, parameters5) = new SqlQueryBuilder()  
.Select()
.Columns("c.CustomerID","c.CompanyName","c.ContactName","c.ContactTitle","c.Address","c.City","c.Region","c.PostalCode","c.Country","c.Phone","c.Fax")
.Column("o.OrderID","LastOrderID")
.Column("o.OrderDate","LastOrderDate")
.Column("o.Freight", "LastOrderFreight")
.INTO(new Table("ArchivedCustomersAndLastOrder"))
.From("Customers", "c")
.OuterApply(new SqlQueryBuilder().Select()
.Top(1)
.Columns("OrderID", "OrderDate" ,"Freight")
.From("Orders")
.Where(new Where(new Column("CustomerID").Equale(new Column("c.CustomerID"))))
.OrderBy(new OrderBy().SetColumnDescending("OrderDate"))
, "o")
.Where(
new Where(new Column("o.OrderDate").LessThan("1997-01-01"))
)
.Select().Star().From("ArchivedCustomersAndLastOrder")
.DropTable(new Table("ArchivedCustomersAndLastOrder"), true)
.Build();

Query build by SqlQueryBuilder 5

            
SELECT c.CustomerID,
       c.CompanyName,
       c.ContactName,
       c.ContactTitle,
       c.Address,
       c.City,
       c.Region,
       c.PostalCode,
       c.Country,
       c.Phone,
       c.Fax,
       o.OrderID AS LastOrderID,
       o.OrderDate AS LastOrderDate,
       o.Freight AS LastOrderFreight
INTO ArchivedCustomersAndLastOrder
FROM Customers AS c OUTER APPLY (SELECT TOP 1 OrderID,
                                              OrderDate,
                                              Freight
                                 FROM Orders
                                 WHERE CustomerID = c.CustomerID
                                 ORDER BY OrderDate DESC) AS o
WHERE o.OrderDate < @pMAIN_2507192051424129220;

SELECT *
FROM ArchivedCustomersAndLastOrder;

DROP TABLE IF EXISTS ArchivedCustomersAndLastOrder; 
            
        

Parameters (If used)

Name Value
@pMAIN_2507192051424129220 1997-01-01

Query Results 5:

  CustomerID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax LastOrderID LastOrderDate LastOrderFreight
1 CENTC Centro comercial Moctezuma Francisco Chang Marketing Manager Sierras de Granada 9993 México D.F. 5022 Mexico (5) 555-3392 (5) 555-7293 10259 7/18/1996 12:00:00 AM 3.2500