Tạo view hiện dữ liệu

Một phần của tài liệu Báo cáo bài tập lớn môn hệ quản trị csdl Đề tài quản lý khách sạn (Trang 30 - 35)

/* -- TẠO VIEW (10 CÂU) --*/

--1. Tạo view cho biết số khách hàng Nam và số khách hàng Nữ CREATE VIEW [số khách hàng Nam và số khách hàng Nữ]

ASSELECT FROM * (

SELECT COUNT(*) AS [tổng khách hàng nữ] FROM tblKhachHang

WHERE sGioiTinh =N'Nu' ) a, (

SELECT COUNT(*) AS [tổng khách hàng nam] FROM tblKhachHang

WHERE sGioiTinh =N'Nam' ) b

SELECT FROM * [số khách hàng Nam và số khách hàng Nữ]

--2. Tạo view cho biết tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)

CREATE OR ALTER VIEW [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)]

AS

SELECT hd.sMaHD,ISNULL([tong tien dv], 0) + ISNULL([tong tien p] 0, ) AS [tổng tiền] FROM [dbo] [tblHoaDon] hd.

LEFT JOIN (

SELECT cdv.sMaHD,SUM(cdv.sGiaNiemYet *

cdv sSoLuong. ) AS[tong tien dv] FROM tblChi_tiet_hoa_don_dv cdv GROUP BY cdv.sMaHD

) a ON a.sMaHD = hd sMaHD. LEFT JOIN(

SELECT cdp.sMaHD,SUM(cdp.sGiaPhong * DATEDIFF day( , sNgayThue, sNgayTra)) AS[tong tien p] FROM

tblChi_tiet_hoa_don_phong cdp GROUP BY cdp.sMaHD ) b ON b.sMaHD = hd sMaHD.

SELECT FROM * [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)]

--3. Tạo view cho biết 3 khách hàng đã trả nhiều tiền nhất CREATE VIEW [3 khách hàng đã trả nhiều tiền nhất]

AS

SELECT TOP 3 kh.sMaKH sTenKH, sGioiTinh, sSDTKH, [tổng , tiền] FROM tblKhachHang kh

LEFT JOIN tblHoaDon hd ON kh sMaKH = hd sMaKH. .

LEFT JOIN [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)] a ON a sMaHD hd. = .sMaHD

ORDER BY a.[tổng tiền] DESC

SELECT FROM * [3 khách hàng đã trả nhiều tiền nhất]

--4. Tạo view thống kê số lượng nhân viên theo giới tính CREATE VIEW [thống kê số lượng nhân viên theo giới tính]

AS

SELECT sGioiTinh, COUNT(*)AS [tổng số nhân viên] FROM tblNhanVien

GROUP BY sGioiTinh

SELECT FROM * [thống kê số lượng nhân viên theo giới tính]

--5. Tạo view thống kê số lượng nhân viên có độ tuổi >= 23 CREATE VIEW [thống kê số lượng nhân viên có độ tuổi >= 23]

ASSELECT COUNT(*) AS [số nhân viên] FROM tblNhanVien WHERE DATEDIFF day( , sNgaysinh, GETDATE()) / 365 >= 23 SELECT FROM * [thống kê số lượng nhân viên có độ tuổi >= 23]

/*6. Đưa ra danh sách khách hàng đã thuê phòng trong tháng này*/

CREATE VIEW [danh sách khách hàng đã thuê phòng trong tháng này]

AS

SELECT kh.sMaKH sTenKH, sGioiTinh, sSDTKH , FROM tblKhachHang kh

INNER JOIN tblHoaDon hd ON kh sMaKH = hd sMaKH. . INNER JOIN tblChi_tiet_hoa_don_phong p ON p sMaHD = . hd sMaHD.

WHERE MONTH(sNgayThue) =MONTH GETDATE( ()) AND YEAR(sNgayThue) =YEAR GETDATE( ())

SELECT FROM * [danh sách khách hàng đã thuê phòng trong tháng này]

--7.Tạo view tính trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019

CREATE VIEW [trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019]

AS

SELECT [tong tien dv] / [so kh] AS [tiền TB] FROM ( SELECT COUNT(x.sMaKH )AS [so kh] FROM (

SELECT sMaKH FROM tblHoaDon hd WHERE YEAR(sNgayLap 2019) = GROUP BY sMaKH

) a, () x

SELECT SUM(cdv sGiaNiemYet cdv sSoLuong AS [tong . * . ) tien dv] FROM tblHoaDon hd

INNER JOIN tblChi_tiet_hoa_don_dv cdv ON cdv.sMaHD = hd sMaHD.

WHERE YEAR(sNgayLap 2019) = ) b

SELECT FROM * [trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019]

--8. Tạo view cho biết danh sach khách hàng đã thuê/đang thuê phòng hạng A

CREATE VIEW [danh sach khách hàng đã thuê/đang thuê phòng hạng A]

ASSELECT kh.sMaKH sTenKH, sGioiTinh, sSDTKH , FROM tblKhachHang kh

INNER JOIN tblHoaDon hd ON hd.sMaKH kh sMaKH= . INNER JOIN tblChi_tiet_hoa_don_phong cp ON cp sMaHD = . hd sMaHD.

INNER JOIN tblPhong p ON cp sMap = p.sMaP. WHERE p.sLoaiP = N'HangA'

SELECT FROM * [danh sach khách hàng đã thuê/đang thuê phòng hạng A]

--9. Tạo view cho biết nhân viên nào có lương cao nhất CREATE VIEW [NVluongMax]

AS

SELECT FROM * tblNhanVien

WHERE sLuongcb sPhuCap + = (SELECT MAX(sLuongcb + sPhuCap) FROM tblNhanVien)

SELECT FROM * NvluongMax

--10. Tạo view cho biết loại dịch vụ nào khách hàng hay sử dụng nhất

CREATE VIEW [loại dịch vụ nào khách hàng hay sử dụng nhất]

ASSELECT sTenLoai FROM tblChi_tiet_hoa_don_dv cdv INNER JOIN tblDichVu dv ON cdv sMaDV dv.sMaDV. = INNER JOIN tblLoaiDV ldv ON dv.sMaLDV = ldv sMaLoai. GROUP BY ldv.sMaLoai, sTenLoai

HAVING COUNT(*) >= (

SELECT TOP 1 COUNT(*) FROM tblChi_tiet_hoa_don_dv cdv INNER JOIN tblDichVu dv ON cdv sMaDV dv.sMaDV. = INNER JOIN tblLoaiDV ldv ON dv.sMaLDV = ldv sMaLoai. GROUP BY ldv.sMaLoai

ORDER BY COUNT(*) DESC )

SELECT FROM * [loại dịch vụ nào khách hàng hay sử dụng nhất]

Một phần của tài liệu Báo cáo bài tập lớn môn hệ quản trị csdl Đề tài quản lý khách sạn (Trang 30 - 35)

Tải bản đầy đủ (PDF)

(77 trang)