A query that uses three subqueries : Subquery « Subquery « SQL Server / T-SQL Tutorial






5>
6>
7>
8> create table Bankers(
9>    BankerID             Integer,
10>    BankerName           VARCHAR(20),
11>    BankerContactLName   VARCHAR(20),
12>    BankerContactFName   VARCHAR(20),
13>    BankerCity           VARCHAR(20),
14>    BankerState          VARCHAR(20),
15>    BankerZipCode        VARCHAR(20),
16>    BankerPhone          VARCHAR(20)
17> )
18> GO
1>
2> insert into Bankers values (1, 'ABC Inc.','Joe','Smith','Vancouver','BC','11111','111-111-1111');
3> GO

(1 rows affected)
1> insert into Bankers values (2, 'DEF Inc.','Red','Rice', 'New York', 'DE','22222','222-222-2222');
2> GO

(1 rows affected)
1> insert into Bankers values (3, 'HJI Inc.','Kit','Cat',  'Paris',    'CA','33333','333-333-3333');
2> GO

(1 rows affected)
1> insert into Bankers values (4, 'QWE Inc.','Git','Black','Regina',   'ER','44444','444-444-4444');
2> GO

(1 rows affected)
1> insert into Bankers values (5, 'RTY Inc.','Wil','Lee',  'Toronto',  'YU','55555','555-555-5555');
2> GO

(1 rows affected)
1> insert into Bankers values (6, 'YUI Inc.','Ted','Larry','Calgary',  'TY','66666','666-666-6666');
2> GO

(1 rows affected)
1> insert into Bankers values (7, 'OIP Inc.','Yam','Act',  'San Franc','FG','77777','777-777-7777');
2> GO

(1 rows affected)
1> insert into Bankers values (8, 'SAD Inc.','Hit','Eat',  'Orland',   'PO','88888','888-888-8888');
2> GO

(1 rows affected)
1> insert into Bankers values (9, 'DFG Inc.','Sad','Lee',  'Wisler',   'PL','99999','999-999-9999');
2> GO

(1 rows affected)
1> insert into Bankers values (0, 'GHJ Inc.','Bit','Lee',  'Ticker',   'MN','00000','000-000-0000');
2> GO

(1 rows affected)
1>
2>
3> create table Billings (
4>     BankerID           INTEGER,
5>     BillingNumber      INTEGER,
6>     BillingDate        datetime,
7>     BillingTotal       INTEGER,
8>     TermsID            INTEGER,
9>     BillingDueDate     datetime ,
10>     PaymentTotal       INTEGER,
11>     CreditTotal        INTEGER
12>
13> );
14> GO
1>
2> INSERT INTO Billings VALUES (1, 1, '2005-01-22', 165, 1,'2005-04-22',123,321);
3> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (2, 2, '2001-02-21', 165, 1,'2002-02-22',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (3, 3, '2003-05-02', 165, 1,'2005-04-12',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (4, 4, '1999-03-12', 165, 1,'2005-04-18',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (5, 5, '2000-04-23', 165, 1,'2005-04-17',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (6, 6, '2001-06-14', 165, 1,'2005-04-18',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (7, 7, '2002-07-15', 165, 1,'2005-04-19',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (8, 8, '2003-08-16', 165, 1,'2005-04-20',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (9, 9, '2004-09-17', 165, 1,'2005-04-21',123,321);
2> GO

(1 rows affected)
1> INSERT INTO Billings VALUES (0, 0, '2005-10-18', 165, 1,'2005-04-22',123,321);
2> GO

(1 rows affected)
1>
2> SELECT Summary1.BankerState, Summary1.BankerName, TopInState.SumOfBillings
3> FROM
4>         (SELECT V_Sub.BankerState, V_Sub.BankerName,
5>             SUM(I_Sub.BillingTotal) AS SumOfBillings
6>         FROM Billings AS I_Sub JOIN Bankers AS V_Sub
7>             ON I_Sub.BankerID = V_Sub.BankerID
8>         GROUP BY V_Sub.BankerState, V_Sub.BankerName) AS Summary1
9>     JOIN
10>         (SELECT Summary2.BankerState,
11>             MAX(Summary2.SumOfBillings) AS SumOfBillings
12>         FROM
13>             (SELECT V_Sub.BankerState, V_Sub.BankerName,
14>                 SUM(I_Sub.BillingTotal) AS SumOfBillings
15>             FROM Billings AS I_Sub JOIN Bankers AS V_Sub
16>                 ON I_Sub.BankerID = V_Sub.BankerID
17>             GROUP BY V_Sub.BankerState, V_Sub.BankerName) AS Summary2
18>         GROUP BY Summary2.BankerState) AS TopInState
19>     ON Summary1.BankerState = TopInState.BankerState AND
20>        Summary1.SumOfBillings = TopInState.SumOfBillings
21> ORDER BY Summary1.BankerState
22> GO
BankerState          BankerName           SumOfBillings
-------------------- -------------------- -------------
BC                   ABC Inc.                       165
CA                   HJI Inc.                       165
DE                   DEF Inc.                       165
ER                   QWE Inc.                       165
FG                   OIP Inc.                       165
MN                   GHJ Inc.                       165
PL                   DFG Inc.                       165
PO                   SAD Inc.                       165
TY                   YUI Inc.                       165
YU                   RTY Inc.                       165

(10 rows affected)
1>
2> drop table Bankers;
3> drop table Billings;
4> GO
1>








8.1.Subquery
8.1.1.Building a Nested Subquery
8.1.2.Using Subqueries to Check for the Existence of Matches
8.1.3.Using Subqueries to Check for the Existence of Matches between two tables
8.1.4.Subqueries are SELECT statements that are nested within another T-SQL statement.
8.1.5.Subqueries and Comparison Operators: =
8.1.6.A subquery can be used with other comparison operators: <
8.1.7.Subqueries and IN Operator
8.1.8.A query that uses three subqueries
8.1.9.Doing calculation with subquery
8.1.10.Subqueries can be nested.
8.1.11.ID NOT IN (SELECT ID FROM Title)
8.1.12.Delete with subquery
8.1.13.Join and sub query
8.1.14.Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
8.1.15.subquery with >=
8.1.16.<> ALL with subquery