DatabaseCreation: views.sql

File views.sql, 4.6 KB (added by 231003, 6 days ago)
Line 
1-- 1. За даден возач: автобус, линија и распоред
2CREATE OR REPLACE VIEW driver_shift_info AS
3SELECT
4 au.name,
5 au.surname,
6 d.verification_code,
7 bi.chassis_number,
8 bi.registration_number,
9 la.start_time,
10 la.end_time,
11 l.line_number
12FROM ApplicationUser au
13JOIN Driver d
14 ON au.user_id = d.user_id
15JOIN Line_assignment la
16 ON d.user_id = la.driver_id
17JOIN Bus_instance bi
18 ON la.chassis_number = bi.chassis_number
19JOIN Schedule s
20 ON la.schedule_id = s.schedule_id
21JOIN Line l
22 ON s.line_id = l.line_id;
23
24
25-- 2. Активни линии со почетна и крајна станица
26CREATE OR REPLACE VIEW line_info AS
27SELECT
28 l.line_number,
29 s_start.station_name AS start_station,
30 s_start.address AS start_address,
31 s_end.station_name AS end_station,
32 s_end.address AS end_address
33FROM Line l
34JOIN Station s_start
35 ON l.start_station_id = s_start.station_id
36JOIN Station s_end
37 ON l.end_station_id = s_end.station_id
38WHERE l.is_active = true;
39
40
41-- 3. Плаќања по статус и тип
42CREATE OR REPLACE VIEW payments_info AS
43SELECT
44 p.payment_id,
45 p.status AS payment_status,
46 p.payment_date,
47 pt.type AS payment_type
48FROM Payment p
49JOIN Payment_type pt
50 ON p.type_id = pt.type_id;
51
52
53-- 4. Станици за дадена линија, со редослед на станиците
54CREATE OR REPLACE VIEW line_stations AS
55SELECT
56 l.line_number,
57 p.num_of_station,
58 s.station_id,
59 s.station_name,
60 s.address
61FROM Line l
62JOIN Position p
63 ON l.line_id = p.line_id
64JOIN Station s
65 ON p.station_id = s.station_id
66ORDER BY l.line_number, p.num_of_station;
67
68
69-- 5. Распоред на линии за дадена станица
70CREATE OR REPLACE VIEW station_info AS
71SELECT
72 s.station_name,
73 s.address,
74 l.line_number,
75 sc.arrival_time
76FROM Station s
77JOIN Position p
78 ON s.station_id = p.station_id
79JOIN Line l
80 ON p.line_id = l.line_id
81JOIN Schedule sc
82 ON l.line_id = sc.line_id
83WHERE l.is_active = true;
84
85
86-- 6. Преглед на работа на админ
87CREATE OR REPLACE VIEW admin_info AS
88SELECT
89 u.name,
90 u.surname,
91 u.email,
92 a.verification_code,
93 a.status,
94 d.user_id AS driver_id,
95 bi.chassis_number,
96 bi.model,
97 la.start_time,
98 la.end_time,
99 sc.departure_time,
100 sc.arrival_time,
101 sc.day_of_week
102FROM ApplicationUser u
103JOIN Admin a
104 ON u.user_id = a.user_id
105JOIN Line_assignment la
106 ON a.user_id = la.admin_id
107JOIN Driver d
108 ON la.driver_id = d.user_id
109JOIN Bus_instance bi
110 ON la.chassis_number = bi.chassis_number
111JOIN Schedule sc
112 ON la.schedule_id = sc.schedule_id
113WHERE a.status = 'Active';
114
115
116-- 7. Информации за единечни билети според тип на купувач
117CREATE OR REPLACE VIEW ticket_info AS
118SELECT
119 c.type,
120 t.ticket_id,
121 st.amount,
122 st.assignment_id,
123 la.start_time,
124 la.end_time,
125 bi.model,
126 bi.capacity,
127 b.brand
128FROM Customer c
129JOIN Ticket t
130 ON c.user_id = t.user_id
131JOIN Single_ticket st
132 ON t.ticket_id = st.ticket_id
133JOIN Line_assignment la
134 ON st.assignment_id = la.assignment_id
135JOIN Bus_instance bi
136 ON la.chassis_number = bi.chassis_number
137JOIN Bus b
138 ON bi.bus_id = b.bus_id;
139
140
141-- 8. Историја на сервисирање за автобус
142CREATE OR REPLACE VIEW bus_service_history AS
143SELECT
144 bi.chassis_number,
145 bi.registration_number,
146 bi.model,
147 m.maintenance_date,
148 m.description,
149 m.cost,
150 m.maintenance_name
151FROM Bus_instance bi
152LEFT JOIN Maintenance m
153 ON bi.chassis_number = m.chassis_number;
154
155
156-- 9. Месечна продажба на билети и приход според начин на плаќање
157CREATE OR REPLACE VIEW monthly_ticket_sales AS
158SELECT
159 date_trunc('month', p.payment_date)::date AS payment_month,
160 pt.type AS payment_method,
161 COUNT(*) AS sold_tickets,
162 SUM(COALESCE(st.amount, pass.amount, 0)) AS total_amount
163FROM Customer_Payment_Ticket cpt
164JOIN Payment p
165 ON cpt.payment_id = p.payment_id
166JOIN Payment_type pt
167 ON p.type_id = pt.type_id
168JOIN Ticket t
169 ON cpt.ticket_id = t.ticket_id
170LEFT JOIN Single_ticket st
171 ON t.ticket_id = st.ticket_id
172LEFT JOIN Pass_ticket ppt
173 ON t.ticket_id = ppt.ticket_id
174LEFT JOIN Pass_type pass
175 ON ppt.type_id = pass.id
176WHERE p.status = 'Completed'
177GROUP BY
178 date_trunc('month', p.payment_date)::date,
179 pt.type;