NỘI DUNG: Tìm hiểu chủ đề IF ... ELSE, IIF, CASE
Bài 1:
- Viết câu truy vấn đếm số lượng nhân viên trong từng phòng ban, nếu số lượng
nhân viên nhỏ hơn 3 thì hiển thị “Thiếu nhân viên”, ngược lại <5 hiển
thị “Đủ Nhan Vien”, ngược lại hiển thị”Đông nhân viên”
- Viết câu truy vấn hiển thị TenNV và thêm cột thuế dựa vào mức lương: trong khoảng 0 and 25000 thì Thuế= LUONG*0.1, trong khoảng 25000 and 30000 thì LUONG*0.12, trong khoảng 30000 and 40000 thì LUONG *0.15, trong khoảng 40000 and 50000 thì LUONG *0.2, còn lại LUONG*0.25
Bài 2:
Sử dụng cơ sở dữ liệu QLDA. Thực hiện các câu truy vấn sau, sử dụng if…else
và case
Viết chương trình xem xét có tăng lương cho nhân viên hay không. Hiển thị
cột thứ 1 là TenNV, cột thứ 2 nhận giá trị
-
“TangLuong” nếu lương hiện tại của nhân viên nhở hơn trung bình lương trong
phòng mà nhân viên đó đang làm việc.
-
“KhongTangLuong “nếu lương hiện tại của nhân viên lớn hơn trung bình lương
trong phòng mà nhân viên đó đang làm việc.
Viết chương trình phân loại nhân viên dựa vào mức lương.
-
Nếu lương nhân viên nhỏ hơn trung bình lương mà nhân viên đó đang làm việc
thì xếp loại “nhanvien”, ngược lại xếp loại “truongphong”
Viết chương trình hiển thị TenNV tùy vào cột phái của nhân viên,
- nếu phái là Nữ thì ghi Ms. + TENNV,
- Nam thì ghi Mr. + TENNV,
- Ngược lại Khong_ro + TENNV
Viết chương trình tính thuế mà nhân viên phải đóng theo công thức:
- 0<luong<25000 thì đóng 10% tiền lương
- 25000<luong<30000 thì đóng 12% tiền lương
- 30000<luong<40000 thì đóng 15% tiền lương
- 40000<luong<50000 thì đóng 20% tiền lương
- Luong>50000 đóng 25% tiền lương
THỰC HIỆN:
Bài 1:
- Viết câu truy vấn đếm số lượng nhân viên trong từng phòng ban, nếu số lượng
nhân viên nhỏ hơn 3 thì hiển thị “Thiếu nhân viên”, ngược lại <5
hiển thị “Đủ Nhan Vien”, ngược lại hiển thị”Đông nhân viên”
Đếm nhân viên theo từng phòng ban
-- thực hiện đếm nhân viên theo từng phòng ban trước
SELECT NHANVIEN.PHG
, COUNT(NHANVIEN.MANV) AS 'So_nv'
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Dùng IFF thực hiện theo yêu cầu đề bài
SELECT NHANVIEN.PHG
, COUNT(NHANVIEN.MANV) AS 'So_nv'
, 'Ghi Chu' = IIF(COUNT(NHANVIEN.MANV) < 3, 'thieu -> can tuyen them',
IIF(COUNT(NHANVIEN.MANV) < 5, 'Du nhan vien', 'Dong nhan vien')
)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Dùng CASE
--CASE
SELECT PHONGBAN.TENPHG
, COUNT(NHANVIEN.PHG) So_luong_nhan_vien
, Ghi_Chu = CASE
WHEN COUNT(NHANVIEN.PHG) < 3 THEN 'Thieu nhan vien'
WHEN COUNT(NHANVIEN.PHG) < 5 THEN 'Du nhan vien'
ELSE 'Dong nhan vien'
END
FROM NHANVIEN
INNER JOIN PHONGBAN ON PHONGBAN.MAPHG = NHANVIEN.PHG
GROUP BY PHONGBAN.TENPHG
- Viết câu truy vấn hiển thị TenNV và thêm cột thuế dựa vào mức lương:
- Trong khoảng 0 and 25000 thì Thuế= LUONG*0.1,
- Trong khoảng 25000 and 30000 thì LUONG*0.12,
- Trong khoảng 30000 and 40000 thì LUONG *0.15,
- Trong khoảng 40000 and 50000 thì LUONG *0.2,
- Còn lại LUONG*0.25
SELECT TENNV, LUONG,
THUE = CASE
WHEN LUONG BETWEEN 0 AND 25000 THEN LUONG * 0.1
WHEN LUONG BETWEEN 25000 AND 30000 THEN LUONG * 0.12
WHEN LUONG BETWEEN 30000 AND 40000 THEN LUONG * 0.15
WHEN LUONG BETWEEN 40000 AND 50000 THEN LUONG * 0.2
ELSE LUONG * 0.25
END
FROM NHANVIEN
Bài 2:
Sử dụng cơ sở dữ liệu QLDA. Thực hiện các câu truy vấn sau, sử dụng if…else
và case
Viết chương trình xem xét có tăng lương cho nhân viên hay không. Hiển thị
cột thứ 1 là TenNV, cột thứ 2 nhận giá trị
-
“TangLuong” nếu lương hiện tại của nhân viên nhở hơn trung bình lương trong
phòng mà nhân viên đó đang làm việc.
-
“KhongTangLuong “nếu lương hiện tại của nhân viên lớn hơn trung bình lương
trong phòng mà nhân viên đó đang làm việc.
Mức lương trung bình mỗi phòng ban
-- Mức lương trung bình mỗi phòng ban
SELECT NHANVIEN.PHG
, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Lưu kết quả vào biến bảng (1)
-- Lưu kết quả vào biến bảng (1)
DECLARE @cau_1a TABLE (ma_phong INT, luong_TB FLOAT)
INSERT INTO @cau_1a
SELECT NHANVIEN.PHG
, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Thực hiện theo yêu cầu đề bài - Dùng
IIF
-- thực hiện theo yêu cầu đề bài (phải kết nối bảng (1) với bảng nhân viên)
-- dùng IIF
SELECT
NHANVIEN.TENNV
, NHANVIEN.LUONG AS Luong_HienTai
, Ghi_Chu_IIF = IIF (NHANVIEN.LUONG < bang_LTB.luong_TB, 'Tang luong', 'KHONG TANG luong')
FROM NHANVIEN
INNER JOIN @cau_1a AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong
Thực hiện theo yêu cầu đề bài - Dùng
CASE
-- dùng CASE
SELECT
NHANVIEN.TENNV
, NHANVIEN.LUONG AS Luong_HienTai
, Ghi_Chu_CASE = CASE
WHEN (NHANVIEN.LUONG < bang_LTB.luong_TB) THEN 'Tang luong'
ELSE 'KHONG TANG luong'
END
FROM NHANVIEN
INNER JOIN @cau_1a AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong
Viết chương trình phân loại nhân viên dựa vào mức lương.
-
Nếu lương nhân viên nhỏ hơn trung bình lương mà nhân viên đó đang làm việc
thì xếp loại “nhanvien”, ngược lại xếp loại “truongphong”
Mức lương trung bình mỗi phòng ban
-- Mức lương trung bình mỗi phòng ban
SELECT NHANVIEN.PHG
, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Lưu kết quả vào biến bảng (1)
-- Lưu kết quả vào biến bảng (1)
DECLARE @cau_1b TABLE (ma_phong INT, luong_TB FLOAT)
INSERT INTO @cau_1b
SELECT NHANVIEN.PHG
, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG
Thực hiện theo yêu cầu đề bài
-- thực hiện theo yêu cầu đề bài (phải kết nối bảng (1) với bảng nhân viên)
SELECT
NHANVIEN.TENNV
, NHANVIEN.LUONG AS Luong_HienTai
, Ghi_Chu_IIF = IIF (NHANVIEN.LUONG < bang_LTB.luong_TB, 'Nhan Vien', 'Truong Phong')
FROM NHANVIEN
INNER JOIN @cau_1b AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong
Viết chương trình hiển thị TenNV tùy vào cột phái của nhân viên,
- Nếu phái là Nữ thì ghi Ms. + TENNV,
- Nam thì ghi Mr. + TENNV,
- Ngược lại Khong_ro + TENNV
Simple CASE
-- Simple CASE
SELECT 'Ten_nhanvien Simple CASE ' = CASE NHANVIEN.PHAI
WHEN N'Nữ' THEN 'Ms. ' + NHANVIEN.TENNV
WHEN N'Nam' THEN 'Mr. ' + NHANVIEN.TENNV
ELSE 'Khong_ro ' + NHANVIEN.TENNV
END
FROM NHANVIEN
Searched CASE
-- Searched CASE
SELECT 'ten nv' = CASE
WHEN NHANVIEN.PHAI LIKE N'Nữ' THEN 'Ms. ' + NHANVIEN.TENNV
WHEN NHANVIEN.PHAI LIKE N'Nam' THEN 'Mr. ' + NHANVIEN.TENNV
ELSE 'Khong_ro ' + NHANVIEN.TENNV
END
FROM NHANVIEN
Viết chương trình tính thuế mà nhân viên phải đóng theo công thức:
- 0<luong<25000 thì đóng 10% tiền lương
- 25000<luong<30000 thì đóng 12% tiền lương
- 30000<luong<40000 thì đóng 15% tiền lương
- 40000<luong<50000 thì đóng 20% tiền lương
- Luong>50000 đóng 25% tiền lương
Thực hiện yêu cầu (Searched Case)
SELECT
NHANVIEN.TENNV
,NHANVIEN.LUONG
,'Dong Thue' = CASE
WHEN NHANVIEN.LUONG between 0 and 25000 THen NHANVIEN.LUONG * 0.1
WHEN NHANVIEN.LUONG between 25000 and 30000 THen NHANVIEN.LUONG * 0.12
WHEN NHANVIEN.LUONG between 30000 and 40000 THen NHANVIEN.LUONG * 0.15
WHEN NHANVIEN.LUONG between 40000 and 50000 THen NHANVIEN.LUONG * 0.20
ELSE NHANVIEN.LUONG * 0.25
END
FROM NHANVIEN
Noted: Câu hỏi đặt ra ở câu lệnh trên là nếu mức lương 25000 thì thuế sẽ đóng là
10% hay 12% ? => Máy tính sẽ thực hiện từ trên xuống nếu lương 25000 thỏa
mản điều kiện đầu nên thuế sẽ đóng là 10% (Thứ tự các câu lệnh trong trường
hợp này các bạn cần để ý)
Xong!