Mega Code Archive

 
Categories / MSSQL Tutorial / Subquery
 

A query that uses three subqueries

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>