Viktig anmärkning:Jag skulle skapa en vy baserat på din nuvarande tabell och undvek att lägga till nya kolumner, eftersom de kommer att avnormalisera ditt schema. Läs mer här .
Jag kommer också att använda gemener för alla identifierare för att undvika att citera.
- för att bilda
GPA_TXT
fältet kan du användato_char()
funktion:to_char(gpa, 'FM09.0')
(FM
kommer att undvika utrymme framför den resulterande strängen); -
för det andra fältet skulle jag använda
GPA
och inteGPA_TXT
för numerisk jämförelse. Du kan kontrollera mer påCASE
konstruera i dokumenten , men blocket kan vara följande: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
Tyvärr, jag vet inte hur betyg tilldelas per GPA, snälla, justera därefter.
Den resulterande frågan för vyn kan vara (även 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;
För att bygga en vy lägg bara CREATE VIEW aview AS
före denna fråga.
REDIGERA
Om du fortfarande lägger till kolumner bör följande göra susen:
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');