-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFunctions.sql
More file actions
154 lines (128 loc) · 3.71 KB
/
Functions.sql
File metadata and controls
154 lines (128 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
IF OBJECT_ID('Interval_Air_Readings', 'TF') IS NOT NULL DROP FUNCTION Interval_Air_Readings
IF OBJECT_ID('Get_Route', 'TF') IS NOT NULL DROP FUNCTION Get_Route
IF OBJECT_ID('Number_Of_Vehicles', 'TF') IS NOT NULL DROP FUNCTION Number_Of_Vehicles
IF OBJECT_ID('Number_Of_Types_Of_Drives', 'TF') IS NOT NULL DROP FUNCTION Number_Of_Types_Of_Drives
GO
CREATE FUNCTION Interval_Air_Readings (@date DATE)
RETURNS @table TABLE (
Interval NVARCHAR(50),
Average_PM10 DECIMAL(7,3),
Standard_Deviation_PM10 DECIMAL(7,3),
Average_PM25 DECIMAL(7,3),
Standard_Deviation_PM25 DECIMAL(7,3),
Average_SO2 DECIMAL(7,3),
Standard_Deviation_SO2 DECIMAL(7,3),
Average_NO2 DECIMAL(7,3),
Standard_Deviation_NO2 DECIMAL(7,3),
Average_O3 DECIMAL(7,3),
Standard_Deviation_O3 DECIMAL(7,3)
)
AS
BEGIN
INSERT INTO @table
SELECT 'week', AVG(PM10), STDEV(PM10), AVG(PM25), STDEV(PM25), AVG(SO2), STDEV(SO2), AVG(NO2), STDEV(NO2), AVG(O3), STDEV(O3)
FROM AirReadings
WHERE DATEPART(week, AirReadingDate) = DATEPART(week, @date)
INSERT INTO @table
SELECT 'month', AVG(PM10), STDEV(PM10), AVG(PM25), STDEV(PM25), AVG(SO2), STDEV(SO2), AVG(NO2), STDEV(NO2), AVG(O3), STDEV(O3)
FROM AirReadings
WHERE MONTH(AirReadingDate) = MONTH(@date)
INSERT INTO @table
SELECT 'year', AVG(PM10), STDEV(PM10), AVG(PM25), STDEV(PM25), AVG(SO2), STDEV(SO2), AVG(NO2), STDEV(NO2), AVG(O3), STDEV(O3)
FROM AirReadings
WHERE YEAR(AirReadingDate) = YEAR(@date)
RETURN
END
GO
SELECT *
FROM dbo.Interval_Air_Readings('2021-12-29')
GO
CREATE FUNCTION Get_Route (@line INT)
RETURNS @route TABLE
(
Ord INT,
[Stop name] NVARCHAR(60)
)
AS
BEGIN
IF NOT EXISTS
(
SELECT LineID FROM Lines
WHERE LineID = @line
)
BEGIN
INSERT INTO @route VALUES
(-1, CAST('Invalid line number.' AS INT))
END
ELSE
IF EXISTS
(
SELECT LineID FROM TramLines
WHERE LineID = @line
)
BEGIN
INSERT INTO @route
SELECT TL.StopNumber, S.StopName
FROM Stops AS S JOIN TramLines AS TL
ON TL.StopID = S.StopID
WHERE TL.LineID = @line
ORDER BY TL.StopNumber
END
ELSE
BEGIN
INSERT INTO @route
SELECT BL.StopNumber, S.StopName
FROM Stops AS S JOIN BusLines AS BL
ON BL.StopID = S.StopID
WHERE BL.LineID = @line
ORDER BY BL.StopNumber
END
RETURN
END
GO
SELECT * FROM dbo.Get_Route(52)
ORDER BY Ord
GO
CREATE FUNCTION Number_Of_Vehicles()
RETURNS @table TABLE
(
Buses INT,
Trams INT,
SpecialVehicles INT
)
AS
BEGIN
DECLARE @noOfTrams INT
DECLARE @noOfBuses INT
DECLARE @noOfSpecialVehicles INT
SET @noOfTrams = (SELECT COUNT(*) FROM (SELECT V.ModelID FROM VehicleModels V JOIN TramModels T ON V.ModelID = T.ModelID) AS subquery)
SET @noOfBuses = (SELECT COUNT(*) FROM (SELECT V.ModelID FROM VehicleModels V JOIN BusModels B ON V.ModelID = B.ModelID) AS subquery1)
SET @noOfSpecialVehicles = (SELECT COUNT(*) FROM (SELECT V.ModelID FROM VehicleModels V JOIN SpecialVehicleModels S ON V.ModelID = S.ModelID) AS subquery2)
INSERT INTO @table
SELECT @noOfBuses, @noOfTrams, @noOfSpecialVehicles
RETURN
END
GO
SELECT * FROM Number_Of_Vehicles()
GO
CREATE FUNCTION Number_Of_Types_Of_Drives()
RETURNS @table TABLE
(
Combustion INT,
Electric INT,
Hybrid INT
)
AS
BEGIN
DECLARE @noOfCombustion INT
DECLARE @noOfElectric INT
DECLARE @noOfHybrid INT
SET @noOfCombustion = (SELECT COUNT(*) FROM (SELECT * FROM BusModels WHERE Drive = 'Combustion') AS subquery)
SET @noOfElectric = (SELECT COUNT(*) FROM (SELECT * FROM BusModels WHERE Drive = 'Electric') AS subquery1)
SET @noOfHybrid = (SELECT COUNT(*) FROM (SELECT * FROM BusModels WHERE Drive = 'Hybrid') AS subquery2)
INSERT INTO @table
SELECT @noOfCombustion, @noOfElectric, @noOfHybrid
RETURN
END
GO
SELECT * FROM Number_Of_Types_Of_Drives()