-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFUNCTION.sql
More file actions
140 lines (129 loc) · 3.64 KB
/
FUNCTION.sql
File metadata and controls
140 lines (129 loc) · 3.64 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
USE CTYMAILINH;
GO
--1. Lấy số chỗ của một loại xe
CREATE FUNCTION fn_GetSoChoXe (@MaLoai NVARCHAR(10))
RETURNS INT
AS
BEGIN
DECLARE @SoCho INT;
SELECT @SoCho = SoCho FROM LoaiXe WHERE MaLoai = @MaLoai;
RETURN @SoCho;
END;
SELECT dbo.fn_GetSoChoXe('L03') AS SoCho;
--2. Lấy giá thuê của một loại xe trên tuyến cụ thể
CREATE FUNCTION fn_GetGiaThue (@MaLoai NVARCHAR(10), @MaTuyen NVARCHAR(10))
RETURNS INT
AS
BEGIN
DECLARE @GiaThue INT;
SELECT @GiaThue = GiaThue FROM GiaThue WHERE MaLoai = @MaLoai AND MaTuyen = @MaTuyen;
RETURN @GiaThue;
END;
SELECT dbo.fn_GetGiaThue('L04', 'T02') AS GiaThue;
--3. Tính tổng số lượng xe đã thuê theo hợp đồng
CREATE FUNCTION fn_TongSoLuongXeThue (@SoHD NVARCHAR(10))
RETURNS INT
AS
BEGIN
DECLARE @TongSoLuong INT;
SELECT @TongSoLuong = SUM(SoLuongXe) FROM HopDongThue WHERE SoHD = @SoHD;
RETURN @TongSoLuong;
END;
SELECT dbo.fn_TongSoLuongXeThue('HD02') AS TongSoLuongXe;
--4. Danh sách xe theo hãng xe
CREATE FUNCTION fn_GetXeByHang (@HangXe NVARCHAR(50))
RETURNS TABLE
AS
RETURN
(
SELECT MaXe, BienSoXe, MaLoai
FROM Xe
WHERE HangXe = @HangXe
);
SELECT * FROM dbo.fn_GetXeByHang('Toyota');
--5. Danh sách khách hàng theo số điện thoại
CREATE FUNCTION fn_GetKhachByPhone (@DienThoai NVARCHAR(15))
RETURNS TABLE
AS
RETURN
(
SELECT MaKhach, TenKhach
FROM Khach
WHERE DienThoai = @DienThoai
);
SELECT * FROM dbo.fn_GetKhachByPhone('03737909570');
--6. Lấy danh sách hợp đồng thuê theo tuyến
CREATE FUNCTION fn_GetHopDongByTuyen (@MaTuyen NVARCHAR(10))
RETURNS TABLE
AS
RETURN
(
SELECT SoHD, MaKhach, MaLoai, SoLuongXe, NgayDi, NgayVe
FROM HopDongThue
WHERE MaTuyen = @MaTuyen
);
SELECT * FROM dbo.fn_GetHopDongByTuyen('T02');
--7. Lấy danh sách hợp đồng có ngày đi trong khoảng thời gian
CREATE FUNCTION fn_GetHopDongByNgay (@TuNgay DATE, @DenNgay DATE)
RETURNS @Result TABLE (
SoHD NVARCHAR(10),
MaKhach NVARCHAR(10),
NgayDi DATE,
NgayVe DATE
)
AS
BEGIN
INSERT INTO @Result
SELECT SoHD, MaKhach, NgayDi, NgayVe
FROM HopDongThue
WHERE NgayDi BETWEEN @TuNgay AND @DenNgay;
RETURN;
END;
SELECT * FROM dbo.fn_GetHopDongByNgay('2025-03-01', '2025-03-31');
--8. Lấy danh sách xe của một loại xe cụ thể
CREATE FUNCTION fn_GetXeByLoai (@MaLoai NVARCHAR(10))
RETURNS @Result TABLE (
MaXe NVARCHAR(10),
HangXe NVARCHAR(50),
BienSoXe NVARCHAR(20)
)
AS
BEGIN
INSERT INTO @Result
SELECT MaXe, HangXe, BienSoXe FROM Xe WHERE MaLoai = @MaLoai;
RETURN;
END;
SELECT * FROM dbo.fn_GetXeByLoai('L02');
--9. Lấy danh sách tuyến có quãng đường lớn hơn giá trị nhập vào
CREATE FUNCTION fn_GetTuyenByQuangDuong (@MinQuangDuong INT)
RETURNS @Result TABLE (
MaTuyen NVARCHAR(10),
DiemDen NVARCHAR(100),
QuangDuong INT
)
AS
BEGIN
INSERT INTO @Result
SELECT MaTuyen, DiemDen, QuangDuong
FROM Tuyen
WHERE QuangDuong >= @MinQuangDuong;
RETURN;
END;
SELECT * FROM dbo.fn_GetTuyenByQuangDuong(100);
--10. Lấy danh sách khách hàng có thuê xe từ ngày X trở đi
CREATE FUNCTION fn_GetKhachHangByNgayThue (@NgayThue DATE)
RETURNS @Result TABLE (
MaKhach NVARCHAR(10),
TenKhach NVARCHAR(100),
NgayDi DATE
)
AS
BEGIN
INSERT INTO @Result
SELECT DISTINCT k.MaKhach, k.TenKhach, h.NgayDi
FROM Khach k
JOIN HopDongThue h ON k.MaKhach = h.MaKhach
WHERE h.NgayDi >= @NgayThue;
RETURN;
END;
SELECT * FROM dbo.fn_GetKhachHangByNgayThue('2025-04-01');