Lưu ý quan trọng:Tôi sẽ tạo một chế độ xem dựa trên bảng hiện tại của bạn và tránh thêm các cột mới, vì chúng sẽ không chuẩn hóa lược đồ của bạn. Đọc thêm tại đây .
Ngoài ra, tôi sẽ sử dụng các tên viết thường cho tất cả các số nhận dạng để tránh quá phát.
- để tạo
GPA_TXT
trường bạn có thể sử dụngto_char()
hàm:to_char(gpa, 'FM09.0')
(FM
sẽ tránh khoảng trắng phía trước chuỗi kết quả); -
đối với trường thứ hai, tôi sẽ sử dụng
GPA
chứ không phảiGPA_TXT
để so sánh số. Bạn có thể kiểm tra thêm trênCASE
xây dựng trong tài liệu , nhưng khối có thể là khối sau:CASE WHEN gpa >= 3.3 THEN 'A' WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B' WHEN gpa > 0 THEN 'C' ELSE 'F' END
Xin lỗi, tôi không biết cách phân điểm cho mỗi điểm trung bình, vui lòng điều chỉnh cho phù hợp.
Truy vấn kết quả cho chế độ xem có thể là (cũng trên SQL Fiddle ):
SELECT name,major,gpa,
to_char(gpa, 'FM09.0') AS gpa_txt,
name||'-'||major||'-Grade'||
CASE WHEN gpa >= 3.3 THEN 'A'
WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B'
WHEN gpa > 0 THEN 'C'
ELSE 'F' END || '-' || to_char(gpa, 'FM09.0') AS adesc
FROM atab;
Để tạo chế độ xem, chỉ cần thêm CREATE VIEW aview AS
trước truy vấn này.
CHỈNH SỬA
Nếu bạn vẫn tiếp tục thêm cột, hãy thực hiện theo mẹo sau:
ALTER TABLE atab ADD gpa_txt text, ADD adesc text;
UPDATE atab SET
gpa_txt = to_char(gpa, 'FM09.0'),
adesc = name||'-'||major||'-Grade'||
CASE WHEN gpa >= 3.3 THEN 'A'
WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B'
WHEN gpa > 0 THEN 'C'
ELSE 'F' END || '-' || to_char(gpa, 'FM09.0');