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_TXTvous 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
GPAet nonGPA_TXTpour la comparaison numérique. Vous pouvez vérifier plus surCASEconstruire 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');