Listing 1: Stored Procedure That Uses the UNION Operator to Return Lease-Detail Information CREATE PROC GetInvoiceDetails @leasenumber int AS -- Get leased furniture. SELECT l.leasenumber, l.Term, 'Furniture' AS ITEM, lf.furnitureid AS ITEMID, lf.quantity, f.LeaseRate, lf.quantity * f.leaserate AS LineItemTotal, NULL AS InvoiceTotal FROM Leases AS l INNER JOIN leases_furniture AS lf ON l.leasenumber = lf.leasenumber AND l.leasenumber = @leasenumber INNER JOIN furniture AS f ON lf.furnitureid = f.furnitureid UNION -- Get leased trucks. SELECT l.leasenumber, l.Term, 'Truck' AS ITEM, lv.TruckID AS ITEMID, lv.quantity, v.LeaseRate, lv.quantity * v.LeaseRate AS LineItemTotal, NULL AS InvoiceTotal FROM leases AS l INNER JOIN leases_Trucks AS lv ON l.leasenumber = lv.leasenumber AND l.leasenumber = @leasenumber INNER JOIN Trucks AS v ON lv.TruckID = v.TruckID UNION -- Get leased computers. SELECT l.leasenumber, l.Term, 'Computer' AS ITEM, lc.computerid AS ITEMID, lc.quantity, c.LeaseRate, lc.quantity * c.LeaseRate AS LineItemTotal, NULL AS InvoiceTotal FROM leases AS l INNER JOIN leases_computers AS lc ON l.leasenumber = lc.leasenumber AND l.leasenumber = @leasenumber INNER JOIN computers AS c ON lc.computerid = c.computerid -- Get invoice grand total. UNION SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, SUM (LineItemTotal) FROM (SELECT SUM(lf.quantity * f.leaserate) AS LineItemTotal FROM leases_furniture AS lf INNER JOIN furniture AS f ON lf.furnitureid = f.furnitureid AND lf.leasenumber = @leasenumber UNION SELECT SUM(lv.quantity * v.leaserate) AS LineItemTotal FROM leases_Trucks AS lv INNER JOIN Trucks AS v ON lv.TruckID = v.TruckID AND lv.leasenumber = @leasenumber UNION SELECT SUM(lc.quantity * c.leaserate) AS LineItemTotal FROM leases_computers AS lc INNER JOIN computers AS c ON lc.computerid = c.computerid AND lc.leasenumber = @leasenumber ) AS T -- Order the results. ORDER BY l.leasenumber DESC, item ASC