Remarque importante :je créerais une vue en fonction de votre table actuelle et évitez d'ajouter de nouvelles colonnes, car elles dénormaliseront votre schéma. En savoir plus ici .
De plus, j'utiliserai des noms en minuscules pour tous les identifiants afin d'éviter les citations.
- pour former
GPA_TXT
vous pouvez utiliserto_char()
fonction :to_char(gpa, 'FM09.0')
(laFM
évitera l'espace devant la chaîne résultante); -
pour le deuxième champ, j'utiliserais
GPA
et nonGPA_TXT
pour la comparaison numérique. Vous pouvez vérifier plus surCASE
construire dans la documentation , mais le bloc pourrait être le suivant :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
Désolé, je ne sais pas comment les notes sont attribuées par GPA, veuillez ajuster en conséquence.
La requête résultante pour la vue peut être (également sur 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;
Pour créer une vue, ajoutez simplement CREATE VIEW aview AS
avant cette requête.
MODIFIER
Si vous optez toujours pour l'ajout de colonnes, ce qui suit devrait faire l'affaire :
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');