Belangrijke opmerking:ik zou een weergave maken gebaseerd op uw huidige tabel en vermeden om nieuwe kolommen toe te voegen, omdat deze uw schema denormaliseren. Lees hier .
Ik zal ook kleine letters gebruiken voor alle identifiers om qouting te voorkomen.
- om
GPA_TXT
te vormen veld dat u kunt gebruikento_char()
functie:to_char(gpa, 'FM09.0')
(deFM
zal spatie voor de resulterende string vermijden); -
voor het tweede veld zou ik
GPA
. gebruiken en nietGPA_TXT
voor numerieke vergelijking. U kunt meer bekijken opCASE
bouwen in de documenten , maar het blok kan het volgende zijn: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
Sorry, ik weet niet hoe de cijfers per GPA worden toegekend, pas dienovereenkomstig aan.
De resulterende query voor de weergave kan zijn (ook op 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;
Om een weergave te maken, plaatst u CREATE VIEW aview AS
voor deze zoekopdracht.
BEWERKEN
Als je toch kiest voor het toevoegen van kolommen, zou het volgende moeten lukken:
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');