sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag skapa en kolumn i postgres från värden och val baserat på andra kolumner?

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ända to_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 inte GPA_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');


  1. Anpassad ORDER BY för att ignorera "the"

  2. Hur man slår upp intervallvärde från databasen

  3. Hur man ansluter till en databas med Sequel Pro

  4. PL/SQL BIND VARIABLER för rektangulär prisma volymberäkning