/* -- 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]