F. CHUẨN HOÁ DỮ LIỆU SANG CHUẨN 3N
IV) XÂY DỰNG CÁC THAO TÁC NGHIỆP VỤ
1. TỔNG DOANH THU THEO THÁNG Code:
CREATE PROCEDURE TongDoanhThuTheoThang AS
BEGIN
SELECT YEAR(NgayLap) AS Nam, MONTH(NgayLap) AS Thang, SUM(TongTien) AS DoanhThu FROM HoaDon
GROUP BY YEAR(NgayLap), MONTH(NgayLap) ORDER BY Nam, Thang;
END;
go
EXEC TongDoanhThuTheoThang;
Stored procedure TongDoanhThuTheoThang trong SQL Server được thiết kế để truy vấn dữ liệu từ bảng HoaDon và trả về một bảng báo cáo tổng doanh thu theo tháng và năm. Cách thức hoạt động của stored procedure này bao gồm các bước sau:
- Đầu tiên, stored procedure sử dụng câu lệnh SELECT để truy vấn dữ liệu từ bảng HoaDon. Sau đó, stored procedure sử dụng hàm YEAR và MONTH để lấy thông tin về năm và tháng từ cột NgayLap.
- Tiếp theo, stored procedure tính tổng doanh thu của mỗi tháng bằng cách sử dụng hàm SUM trên cột TongTien.
- Sau đó, stored procedure nhóm kết quả theo năm và tháng bằng cách sử dụng câu lệnh GROUP BY. Kết quả được sắp xếp theo thứ tự tăng dần của năm và tháng bằng cách sử dụng câu lệnh ORDER BY.
Kết quả cuối cùng được trả về là một bảng báo cáo với các cột là năm, tháng và tổng doanh thu của mỗi tháng được liệt kê theo thứ tự tăng dần của năm và tháng. Stored procedure TongDoanhThuTheoThang này có thể giúp cho
người dùng dễ dàng theo dõi và phân tích doanh thu của cửa hàng theo từng tháng và năm.
2. BÁO CÁO SỐ LƯỢNG HÓA ĐƠN VÀ DOANH THU CỦA TỪNG KHÁCH HÀNG
Code:
CREATE PROCEDURE BaoCaoSoLuongHoaDonVaDoanhThuCuaTungKhachHang AS
BEGIN SELECT
K.MaKhachHang AS MaKhachHang,
K.HoTenDem + ' ' + K.Ten AS TenKhachHang, COUNT(H.MaHoaDon) AS SoHoaDon, SUM(H.TongTien) AS TongTien FROM
KhachHang K LEFT JOIN
HoaDon H ON K.MaKhachHang = H.MaKhachHang GROUP BY
K.MaKhachHang, K.HoTenDem, K.Ten ORDER BY
TongTien DESC;
END;
go
EXEC BaoCaoSoLuongHoaDonVaDoanhThuCuaTungKhachHang;
Stored procedure BaoCaoSoLuongHoaDonVaDoanhThuCuaTungKhachHang trong SQL Server được thiết kế để truy vấn dữ liệu từ bảng KhachHang và HoaDon, và trả về một bảng báo cáo với thông tin về số lượng hóa đơn và tổng doanh thu của từng khách hàng. Cách thức hoạt động của stored procedure này bao gồm các bước sau:
- Đầu tiên, stored procedure sử dụng câu lệnh SELECT để truy vấn dữ liệu từ bảng KhachHang. Sau đó, sử dụng câu lệnh LEFT JOIN để kết hợp dữ liệu từ bảng HoaDon với bảng KhachHang dựa trên trường MaKhachHang.
- Tiếp theo, sử dụng hàm COUNT để đếm số lượng hóa đơn của mỗi khách hàng và hàm SUM để tính tổng doanh thu của mỗi khách hàng.
- Sau đó, stored procedure nhóm kết quả theo mã khách hàng, họ tên đệm và tên khách hàng bằng cách sử dụng câu lệnh GROUP BY.
Kết quả cuối cùng được sắp xếp theo thứ tự giảm dần của tổng doanh thu của từng khách hàng bằng cách sử dụng câu lệnh ORDER BY. Khi stored procedure được gọi, nó sẽ trả về một bảng báo cáo với các cột là mã khách hàng, tên khách hàng, số lượng hóa đơn và tổng doanh thu của từng khách hàng. Bảng báo cáo này giúp người dùng dễ dàng theo dõi và phân tích doanh thu của từng khách hàng, với khách hàng có tổng doanh thu cao nhất được hiển thị đầu tiên trong bảng.
3. BÁO CÁO SỐ LƯỢNG MÓN ĂN BÁN ĐƯỢC TRONG MỖI HÓA ĐƠN
Code:
CREATE FUNCTION dbo.GetMonAnCountByHoaDon() RETURNS TABLE
AS RETURN (
SELECT H.MaHoaDon,
COUNT(CHD.MaMonAn) AS SoLuongMonAn FROM
HoaDon H
INNER JOIN ChiTietHoaDon CHD ON H.MaHoaDon = CHD.MaHoaDon GROUP BY
H.MaHoaDon );
go
SELECT * FROM dbo.GetMonAnCountByHoaDon();
Đầu tiên, function sử dụng câu lệnh SELECT để truy vấn dữ liệu từ bảng HoaDon. Sau đó, sử dụng câu lệnh INNER JOIN để kết hợp dữ liệu từ bảng ChiTietHoaDon với bảng HoaDon dựa trên trường MaHoaDon.
- Tiếp theo, sử dụng hàm COUNT để đếm số lượng món ăn trong mỗi hóa đơn.
- Sau đó, function nhóm kết quả theo mã hóa đơn bằng cách sử dụng câu lệnh GROUP BY.
Khi function được gọi, nó sẽ trả về một bảng kết quả với các cột là mã hóa đơn và số lượng món ăn trong mỗi hóa đơn. Bảng kết quả này chứa thông tin về số lượng món ăn trong từng hóa đơn, giúp người dùng dễ dàng theo dõi và phân tích số lượng món ăn được bán ra trong mỗi hóa đơn.
4. BÁO CÁO SỐ LƯỢNG HÓA ĐƠN THEO NHÂN VIÊN Code:
CREATE FUNCTION dbo.GetHoaDonCountByNhanVien() RETURNS TABLE
AS RETURN (
SELECT
NV.HoTenDem + ' ' + NV.Ten AS NhanVien, COUNT(H.MaHoaDon) AS SoLuongHoaDon FROM
NhanVien NV
LEFT JOIN HoaDon H ON NV.MaNhanVien = H.MaNhanVien GROUP BY
NV.HoTenDem, NV.Ten );
go
SELECT * FROM dbo.GetHoaDonCountByNhanVien();
Đầu tiên, function sử dụng câu lệnh SELECT để truy vấn dữ liệu từ bảng NhanVien. Sau đó, sử dụng câu lệnh LEFT JOIN để kết hợp dữ liệu từ bảng HoaDon với bảng NhanVien dựa trên trường MaNhanVien.
- Tiếp theo, sử dụng hàm COUNT để đếm số lượng hóa đơn của mỗi nhân viên.
- Sau đó, function nhóm kết quả theo tên đệm và tên của nhân viên bằng cách sử dụng câu lệnh GROUP BY.
Khi function được gọi, nó sẽ trả về một bảng kết quả với các cột là tên đệm và tên của nhân viên, cùng với số lượng hóa đơn của từng nhân viên. Bảng kết quả này chứa thông tin về số lượng hóa đơn của từng nhân viên, giúp người dùng dễ dàng theo dõi và phân tích hiệu suất công việc của từng nhân viên trong việc xử lý các hóa đơn.
5. BẢNG BÁO CÁO CHI TIẾT HÓA ĐƠN CODE:
CREATE TRIGGER UpdateTotalPrice ON dbo.ChiTietHoaDon
AFTER INSERT, UPDATE AS
BEGIN
UPDATE HoaDon
SET TongTien = (SELECT SUM(ThanhTien) FROM dbo.ChiTietHoaDon WHERE MaHoaDon = inserted.MaHoaDon)
FROM HoaDon
INNER JOIN inserted ON HoaDon.MaHoaDon = inserted.MaHoaDon;
END;
INSERT INTO ChiTietHoaDon (MaHoaDon, MaMonAn, SoLuong, ThanhTien, DonGia) VALUES (301, 903, 2, 150000, 40000)
Select * from dbo.ChiTietHoaDon
WITH MonAnBanChay AS ( SELECT
M.MaMonAn, M.TenMonAn,
SUM(CHD.SoLuong) AS TongSoLuong FROM
Menu AS M JOIN
ChiTietHoaDon AS CHD ON M.MaMonAn = CHD.MaMonAn JOINN
HoaDon AS HD ON CHD.MaHoaDon = HD.MaHoaDon WHERE
MONTH(HD.NgayLap) = MONTH(GETDATE()) AND YEAR(HD.NgayLap) = YEAR(GETDATE())
GROUP BY
M.MaMonAn, M.TenMonAn )
SELECT *
FROM
MonAnBanChay WHERE