Vigtig bemærkning:Jeg vil oprette en visning baseret på din nuværende tabel og undgik at tilføje nye kolonner, da de vil denormalisere dit skema. Læs mere her .
Jeg vil også bruge små bogstaver til alle identifikatorer for at undgå qouting.
- for at danne
GPA_TXT
felt kan du brugeto_char()
funktion:to_char(gpa, 'FM09.0')
(FM
undgår plads foran den resulterende streng); -
til det andet felt ville jeg bruge
GPA
og ikkeGPA_TXT
til numerisk sammenligning. Du kan tjekke mere påCASE
konstruer i dokumenterne , men blokken kan være den følgende: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
Beklager, jeg ved ikke, hvordan karakterer tildeles pr. GPA. Juster venligst i overensstemmelse hermed.
Den resulterende forespørgsel til visningen kan være (også på 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;
For at bygge en visning skal du blot sætte CREATE VIEW aview AS
foran før denne forespørgsel.
REDIGER
Hvis du stadig går efter at tilføje kolonner, burde følgende gøre tricket:
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');