Nota importante:creerei una vista in base alla tabella corrente ed evitato di aggiungere nuove colonne, poiché denormalizzeranno il tuo schema. Leggi di più qui .
Inoltre, userò nomi minuscoli per tutti gli identificatori per evitare qouting.
- per formare
GPA_TXT
campo puoi utilizzareto_char()
funzione:to_char(gpa, 'FM09.0')
(ilFM
eviterà lo spazio davanti alla stringa risultante); -
per il secondo campo, userei
GPA
e nonGPA_TXT
per il confronto numerico. Puoi controllare di più suCASE
costruire in i documenti , ma il blocco potrebbe essere il seguente: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
Spiacenti, non so come vengono assegnati i voti per GPA, per favore, aggiusta di conseguenza.
La query risultante per la vista potrebbe essere (anche su 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;
Per creare una vista, anteponi CREATE VIEW aview AS
prima di questa query.
MODIFICA
Se continui ad aggiungere colonne, quanto segue dovrebbe fare il trucco:
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');