Ważna uwaga:utworzyłbym widok w oparciu o aktualną tabelę i uniknięto dodawania nowych kolumn, ponieważ spowodują one denormalizację schematu. Przeczytaj więcej tutaj .
Ponadto będę używał nazw małych liter dla wszystkich identyfikatorów, aby uniknąć cytowania.
- utworzyć
GPA_TXT
pole, którego możesz użyćto_char()
funkcja:to_char(gpa, 'FM09.0')
(FM
uniknie spacji przed wynikowym ciągiem); -
w drugim polu użyłbym
GPA
a nieGPA_TXT
do porównania numerycznego. Możesz sprawdzić więcej naCASE
konstrukcja w dokumentacji , ale blok może być następujący: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
Przepraszam, nie wiem, w jaki sposób oceny są przydzielane według GPA, proszę o odpowiednie dostosowanie.
Wynikowe zapytanie dla widoku może być (również na 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;
Aby zbudować widok, po prostu dopisz CREATE VIEW aview AS
przed tym zapytaniem.
EDYTUJ
Jeśli nadal chcesz dodawać kolumny, wykonaj następujące czynności:
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');