Advertisement
Guest User

Untitled

a guest
Jan 14th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.92 KB | None | 0 0
  1. USE Flights
  2. GO
  3.  
  4. CREATE FUNCTION ScheduleForAGivenFlight(@flight_date date)
  5. RETURNS TABLE
  6. AS
  7. RETURN
  8. (
  9.   SELECT
  10.      f.flight_number,
  11.      f.flight_date,
  12.      s.dept_city,
  13.      s.dept_time,
  14.      s.arrv_city,
  15.      s.arrv_time
  16.   FROM
  17.      Flights f
  18.   INNER JOIN Schedules s ON s.flight_number = f.flight_number
  19.   WHERE f.flight_date = @flight_date
  20. );
  21. GO
  22.  
  23. DROP FUNCTION dbo.ScheduleForAGivenFlight
  24. GO
  25.  
  26. CREATE FUNCTION CountOfPassengersWhoFlewWithGivenCompany(@code char(2), @begin_date date, @end_date date)
  27. RETURNS integer
  28. AS
  29. BEGIN
  30.    DECLARE @countOfPassengers integer;
  31.    SET @countOfPassengers = (SELECT SUM(f.occ_econ_cap + f.occ_buss_cap)
  32.                              FROM Flights f
  33.                              WHERE f.airline_code = @code AND
  34.                              f.flight_date >= @begin_date AND
  35.                              f.flight_date <= @end_date)
  36.    RETURN @countOfPassengers;
  37. END;
  38. GO
  39.  
  40. DROP FUNCTION dbo.CountOfPassengersWhoFlewWithGivenCompany
  41. GO
  42.  
  43. CREATE FUNCTION GetBeginDate()
  44. RETURNS date
  45. AS
  46. BEGIN
  47.    DECLARE @begin_date date;
  48.    SET @begin_date = CAST(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) AS date);
  49.    RETURN @begin_date;
  50. END;
  51. GO
  52.  
  53. DROP FUNCTION dbo.GetBeginDate
  54. GO
  55.  
  56. CREATE FUNCTION GetEndDate()
  57. RETURNS date
  58. AS
  59. BEGIN
  60.    DECLARE @end_date date;
  61.    SET @end_date = CAST(DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) AS date);
  62.    RETURN @end_date;
  63. END;
  64. GO
  65.  
  66. DROP FUNCTION dbo.GetEndDate
  67. GO
  68.  
  69. CREATE VIEW v_info_about_airlines_company AS
  70.   SELECT
  71.      a.name,
  72.      (SELECT dbo.CountOfPassengersWhoFlewWithGivenCompany(a.code, Flights.dbo.GetBeginDate(), Flights.dbo.GetEndDate())) AS CountOfPassengers,
  73.      s.*
  74.   FROM
  75.      Airlines a
  76.   INNER JOIN Flights f ON f.airline_code = a.code
  77.   INNER JOIN (SELECT * FROM ScheduleForAGivenFlight(CAST(GETDATE() AS date))) AS s
  78.   ON f.flight_number = s.flight_number
  79. GO
  80.  
  81. DROP VIEW v_info_about_airlines
  82. GO
  83.  
  84. -- TESTING THE VIEW
  85.  
  86. INSERT INTO FLIGHTS
  87.     VALUES('AA', 1203, '2017-11-24', 427, 'USD', 385, 270, 52, 50, ((50*1.5 + 270)*427), 17);
  88.    
  89. INSERT INTO FLIGHTS
  90.     VALUES('AZ', 1202, '2017-12-30', 668, 'USD', 385, 300, 52, 0, (300*668), 17);
  91.  
  92. INSERT INTO FLIGHTS
  93.     VALUES('AA', 1201, '2017-12-11', 422.92, 'USD', 385, 250, 52, 50, ((50*1.5 + 250)*422.92), 17);
  94.    
  95. INSERT INTO FLIGHTS
  96.     VALUES('AZ', 1200, '2017-12-03', 669.94, 'USD', 385, 200, 52, 50, ((50*1.5 + 200)*669.94), 17);
  97.    
  98. INSERT INTO SCHEDULES
  99.     VALUES('AA', 1203, 'US', 'NEW YORK', 'JFK', '12:00:00', 'US', 'SAN FRANSISCO', 'SFO', '15:03:00', 182, 2679);
  100.    
  101. INSERT INTO SCHEDULES
  102.     VALUES('AZ', 1202, 'IT', 'ROME', 'FCO', '19:05:00', 'DE', 'FRANKFURT', 'FRA', '21:05:00', 125, 845);
  103.  
  104. INSERT INTO SCHEDULES
  105.     VALUES('AA', 1201, 'US', 'SAN FRANSISCO', 'SFO', '12:02:00', 'US', 'NEW YORK', 'JFK', '15:03:00', 182, 2679);
  106.    
  107. INSERT INTO SCHEDULES
  108.     VALUES('AZ', 1200, 'DE', 'FRANKFURT', 'FRA', '19:02:00', 'IT', 'ROME', 'FCO', '21:05:00', 125, 845);
  109.  
  110. SELECT * FROM v_info_about_airlines_company
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement